ho bisogno di memorizzare un valore come Float
, ma i dati di origine è un CGFloat
:Casting CGFloat galleggiare Swift
let myFloat : Float = myRect.origin.x
ma questo genera l'errore del compilatore: 'NSNumber' non è del sottotipo ' float '
Quindi, se io scaccio esplicitamente in questo modo:
let myFloat : Float = myRect.origin.x as Float
ma questo a sua volta provoca l'errore del compilatore:' Impossibile convertire il tipo di espressione 'Fl oat 'a' Float ''
Qual è il modo corretto per farlo e soddisfare il compilatore, per favore?
essere consapevoli del fatto che a 64 bit sistemi, la fusione di CGFloat su Float perde precisione - CGFloat è 64 bit su sistemi a 64 bit e 32 bit su sistemi a 32 bit, Float è sempre a 32 bit. Per evitare questo, potresti usare Double invece di Float. – Lukas
possibile duplicato di [swift: Confusione dovuta a nessuna conversione implicita di CGFloat] (http://stackoverflow.com/questions/24118134/swift-confusion-due-to-no-implicit-conversion-of-cgfloat) – Sulthan
se si scavare su un CGFloat in Xcode e vedere dove è definito vedrai che è tipizzato come float su architettura a 32 bit e doppio su architettura a 64 bit. – jcpennypincher