2015-12-15 3 views
18

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

Voici le code que j'ai cela 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); 

    } 
} 

Est-ce que quelqu'un peut contourner ce problème?

+0

laisser floatInNumber = NSNumber (float: flotteur (floatValue)) –

Répondre

37

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)) 
+0

le problème avec laisser myNumber = NSNumber (valeur: Float (myFloat)) est que je perds la précision CGFloat 0.4 => Flottement 0.400000006 – CiNN

7

Swift 3

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

1

Pour moi, cela a fonctionné.

self.configuration.cellHeight as NSNumber! 
5

Swift 3,1

var final_price: CGFloat = 12.34 
let num = final_price as NSNumber