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?
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))
Pour Swift 3.1
var final_price: CGFloat = 12.34
let num = final_price as NSNumber
Swift
let myNumber = NSNumber(value: Float(myCGFloat))
Pour moi, cela fonctionne.
self.configuration.cellHeight as NSNumber!
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)