以下代码运行良好,但我很惊讶,因为我认为set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "foo" "bar" "baz")
需要对象键和&值,不会NSCache
。有人可以向我解释发生了什么吗?
CGFloat
答案 0 :(得分:2)
来自Working with Cocoa Data Types “将Swift与Cocoa和Objective-C一起使用”文档:
<强>数字强>
Swift会自动桥接某些原生数字类型,例如
Int
和Float
,NSNumber
...
它还允许您将类型Int
的值传递给期望NSNumber
的参数。
文档提及Int
,UInt
,Float
,Double
,Bool
作为自动桥接到NSNumber
的类型,但显然
这适用于CGFloat
(如果导入了“Foundation”)。
所以在
self.cachedPoints.setObject(r, forKey: theta)
r
和theta
都包含在NSNumber
个实例中
然后传递给setObject()
方法,该方法有两个参数
类型为AnyObject
。
反方向还有一个桥接,但也就是说
记录不完整(或者我找不到)。你可以施展
NSNumber
到CGFloat
的实例(或Int
,Float
,...)
let num : NSNumber = ...
let x = num as CGFloat
,结果与您在数字实例上调用doubleValue
(或floatValue
,具体取决于架构)相同。
在
let obj : AnyObject = ...
let y = obj as? CGFloat // CGFloat?
对象可选地强制转换为NSNumber
并且 - 如果成功的话
- 转换为CGFloat
,如上例所示。
这就是
中发生的事情if let r = self.cachedPoints.objectForKey(theta) as? CGFloat { ... }
如果objectForKey()
的返回值为NSNumber
,那么
它会转换为CGFloat
并分配给r
。除此以外,
可选的绑定失败。