「Using Swift with Cocoa and Objective-C」ドキュメントの「Working with Cocoa Data Types 」から:
数字
Int
Swift は、やなどの特定のネイティブの数値型を に自動的にブリッジFloat
しNSNumber
ます。
...また、 type の値を、たとえば . を期待する引数
に渡すこともできます。Int
NSNumber
Int
ドキュメントでは、UInt
、Float
、Double
、 にBool
自動的にブリッジされるタイプとして言及されていますNSNumber
が、明らかにこれはCGFloat
同様に機能します (「Foundation」がインポートされている場合)。だから
self.cachedPoints.setObject(r, forKey: theta)
r
との両方theta
がインスタンスにラップされてから、 type の 2 つのパラメーターを受け取るメソッドにNSNumber
渡されます。setObject()
AnyObject
逆方向のブリッジングもありますが、あまり文書化されていません (または、見つけられませんでした)。のインスタンスをNSNumber
to CGFloat
(またはInt
, Float
, ...)にキャストできます
let num : NSNumber = ...
let x = num as CGFloat
doubleValue
結果は、 number インスタンスで(または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
ます。それ以外の場合、オプションのバインドは失敗します。