我只是想绕过CGFloat返回值CGRectGetWidth.
override func layoutSubviews() {
let roundedWidth = roundf(CGRectGetWidth(self.bounds))
...
}
Run Code Online (Sandbox Code Playgroud)
编译器不会让我,给出错误:
'NSNumber' is not a subtype of 'CFloat'.
我想这里有一些基本的东西.roundf走的是一条CFloat作为参数,所以我怎么能转换我CGFloat来CFloat进行转换?
更新:
现在使用round而不是roundf但我仍然得到相同的错误.我已经尝试清理项目并重新启动Xcode.

CGRect成员们CGFloats,尽管他们的名字,实际上是CDoubles.因此,你需要使用round(),而不是roundf()
override func layoutSubviews() {
let roundedWidth = round(CGRectGetWidth(self.bounds))
...
}
Run Code Online (Sandbox Code Playgroud)
问题是CGFloat是平台相关的(就像它在ObjC中一样).在32位环境中,CGFloat的类型别名为CFloat - 在64位环境中,为CDouble.在ObjC中,没有更多迂腐的警告,圆形很高兴消耗你的浮动,并使你的双打.
Swift不允许隐式类型转换.
尝试构建iPhone 5和iPhone 5s模拟器,我怀疑你会看到一些差异.
由于某种原因,我需要进行显式类型转换才能CDouble使其工作。
let roundedWidth = round(CDouble(CGRectGetWidth(self.bounds)))
Run Code Online (Sandbox Code Playgroud)
我觉得这很奇怪,因为 a根据定义CGFloat是 a 。CDouble似乎编译器由于某种原因在这里有点困惑。