Ich muss einen Wert als speichern Float
, aber die Quelldaten sind CGFloat
:
let myFloat : Float = myRect.origin.x
Dies führt jedoch zu einem Compilerfehler: 'NSNumber' ist nicht vom Subtyp 'Float'.
Also, wenn ich es explizit so besetze:
let myFloat : Float = myRect.origin.x as Float
Dies führt jedoch wiederum zu dem Compilerfehler: 'Der Ausdruckstyp' Float 'kann nicht in' Float 'konvertiert werden.'
Was ist der richtige Weg, um dies zu tun und den Compiler zufrieden zu stellen?
Antworten:
Sie können den
Float()
Initialisierer verwenden:quelle
float
anstelle von verwendenFloat
, sieht es also so aus, als ob dieser Typ / dieses Schlüsselwort anstelle eines Variablennamens verwendet wird.Wenn Sie so faul sind wie ich, definieren Sie in einer Extensions.swift Folgendes:
Dann können Sie tun:
quelle
Normalerweise ist es die beste Lösung, den Typ und die Verwendung
CGFloat
auch in Swift beizubehalten. Das liegt daran, dassCGFloat
32-Bit- und 64-Bit-Computer unterschiedliche Größen haben.Das Schlüsselwort
as
kann nur für dynamisches Casting (für Unterklassen) verwendet werden, zAllerdings
Double
,Int
,Float
usw. sind nicht Unterklassen voneinander, also zu „cast“ müssen Sie eine neue Instanz erstellen, zBquelle
as
einen generischen Typ auch in einen konkreten Typ umwandeln können. Zum Beispiel, wenn Sie eine Funktion haben , die eine generische Art akzeptiert , dass KonformBinaryInteger
, können Sie es werfen könnenInt
mitas?
oderas!
.