web-dev-qa-db-fra.com

Convertir CGFloat en NSNumber en Swift

J'ai une extension dans Swift qui contient certaines propriétés qui sont CGFloat. Le problème est que je ne sais pas comment obtenir la valeur CGFloat du magasin comme NSNumber en utilisant les objets associés

Voici le code que j'ai qui ne fonctionne pas mais il détaille ce que je veux faire:

var scaledFontSize: CGFloat {
    get {
        guard let fontSize = objc_getAssociatedObject(self, &AssociatedKeys.scaledFontSize) as? NSNumber else {
            //Set it
            let scaledFont:CGFloat = VGSizeValues.getValueFromValue(self.font.pointSize);
                //Fails here
            objc_setAssociatedObject(self,&AssociatedKeys.scaledFontSize, NSNumber( scaledFont),objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            return scaledFont;
        }
        return CGFloat(fontSize.doubleValue);

    }
}

Quelqu'un peut-il contourner cela?

25
FireDragonMule

Dans Swift 3.0

let myFloat : CGFloat = 1234.5

let myNumber = NSNumber(value: Float(myFloat))

ou

let myNumber = NSNumber(value: Double(myFloat))

Dans Swift 2

let myNumber = NSNumber(double: myFloat.native)

ou

let myNumber = NSNumber(double: Double(myFloat))

ou

let myNumber = NSNumber(float: Float(myFloat))
53
ttarik

Pour Swift 3.1

var final_price: CGFloat = 12.34
let num = final_price as NSNumber
8
Tot FOURLEAF

Swift

let myNumber = NSNumber(value: Float(myCGFloat))

7
Raymond

Pour moi, cela fonctionne.

self.configuration.cellHeight as NSNumber!
1

Vous pouvez accéder à NativeType d'un CGFloat via la propriété native:

public var native: CGFloat.NativeType

Le type natif utilisé pour stocker le CGFloat, qui est Float sur les architectures 32 bits et Double sur les architectures 64 bits.

Avec cela, vous pouvez créer un NSNumber comme ceci:

NSNumber(value: cgFloat.native)
0
Mark Leonard