muszę przechowywać wartość jako Float
, ale dane źródło jest CGFloat
:Casting CGFloat się unosić w Swift
let myFloat : Float = myRect.origin.x
ale powoduje to błąd kompilatora: „NSNumber” nie jest podtypem " pływak „
Więc jeśli jawnie rzucić go tak:
let myFloat : Float = myRect.origin.x as Float
ale to z kolei powoduje błąd kompilatora:” nie można przekonwertować typu ekspresji w „FL oat 'to' Float ''
Jaki jest prawidłowy sposób to zrobić i proszę o kompilator?
Należy pamiętać, że w 64-bitowych systemy, rzutowanie CGFloat na Float traci precyzję - CGFloat ma 64 bity w systemach 64-bitowych i 32 bity w systemie 32-bitowym, Float ma zawsze 32 bity. Aby tego uniknąć, możesz użyć opcji Double zamiast Float. – Lukas
możliwy duplikat [swift: Confusion z powodu niejawnej konwersji CGFloat] (http://stackoverflow.com/questions/24118134/swift-confusion-due-to-no-implicit-conversion-of-cgfloat) – Sulthan
jeśli drążenie CGFloat w Xcode i zobaczenie, gdzie jest zdefiniowane, zobaczysz, że jest typowane jako float w 32-bitowej architekturze i podwójnej 64-bitowej architekturze. – jcpennypincher