我需要将一个值存储为Float
,但是源数据是一个CGFloat
let myFloat : Float = myRect.origin.x
但这会导致编译器错误:“NSNumber”不是子类型“Float”
因此,如果我显式地将其转换为:
let myFloat : Float = myRect.origin.x as Float
但这又会导致编译器错误:“无法将表达式的类型'Float‘转换为’Float‘”
有什么正确的方法可以做到这一点并满足编译器的要求?
发布于 2014-06-11 02:04:09
通常,最好的解决方案是保留类型并使用CGFloat
,即使在Swift中也是如此。这是因为CGFloat
在32位和64位机器上具有不同的大小。
关键字as
只能用于动态转换(用于子类),例如
class A {
}
class B : A {
}
var a: A = B()
var b: B = a as B
然而,Double
、Int
、Float
等不是彼此的子类,因此要“强制转换”你必须创建一个新实例,例如
var d: Double = 2.0
var f: Float = Float(d) //this is an initialiser call, not a cast
var i: Int = Int(d) //this is an initialiser call, not a cast
https://stackoverflow.com/questions/24147568
复制相似问题