我只想尝试CGFloat
的{{1}}返回值。
CGRectGetWidth
编译器不会让我,给出错误:
override func layoutSubviews() {
let roundedWidth = roundf(CGRectGetWidth(self.bounds))
...
}
。
我想我在这里缺少一些基本的东西。 'NSNumber' is not a subtype of 'CFloat'
以roundf
为参数,那么如何将CFloat
转换为CGFloat
进行转换?
更新
现在使用round而不是roundf但我仍然得到相同的错误。我已经尝试清理项目并重新启动Xcode。
答案 0 :(得分:5)
CGRect
成员CGFloats
,尽管他们的名字,但实际上是CDoubles
。因此,您需要使用round()
,而不是roundf()
override func layoutSubviews() {
let roundedWidth = round(CGRectGetWidth(self.bounds))
...
}
答案 1 :(得分:5)
问题在于CGFloat是平台相关的(就像它在ObjC中一样)。在32位环境中,CGFloat的类型别名为CFloat - 在64位环境中,为CDouble。在ObjC中,如果没有更多迂腐的警告,圆形很高兴消耗你的浮动,并将你的双打完成。
Swift不允许隐式类型转换。
尝试构建iPhone 5和iPhone 5s模拟器,我怀疑你会看到一些差异。
答案 2 :(得分:1)
出于某种原因,我需要对CDouble
进行明确的类型转换才能使其正常工作。
let roundedWidth = round(CDouble(CGRectGetWidth(self.bounds)))
我觉得这很奇怪,因为根据定义,CGFloat
是CDouble
。似乎编译器由于某种原因在这里有点困惑。
答案 3 :(得分:1)
CGFloat()适用于我的所有架构。