這有點令人困惑,因爲Swift對Objective-C的橋接,其中大部分東西都是類,而且值類型較少。要查看斯威夫特確實沒有的橋樑,打造一個新的平臺,並在頂部刪除import ...
語句,然後嘗試投Int
到Any
(沒問題)和AnyObject
:
let num = 23 // 23
let anyNum: Any = num // 23
let anyObjectNum: AnyObject = num
// error: type 'Int' does not conform to protocol 'AnyObject'
現在在加import Foundation
您的操場上方:
import Foundation
let num = 23 // 23
let anyNum: Any = num // 23
let anyObjectNum: AnyObject = num // 23
錯誤消失 - 爲什麼?當它看到將Int
投射到AnyObject
的嘗試時,Swift首先將num
橋接爲Objective-C NSNumber
類的一個實例,在Foundation
中找到,然後將其轉換爲所需的AnyObject
。陣列中發生同樣的事情。
您可以或多或少地證明了這是一個使用is
關鍵字的情況下 - 因爲NSNumber
橋樑所有數值類型的雨燕,它返回一些有趣的情況下true
:
anyNum is Int // true
anyNum is Double // false
anyObjectNum is Int // true
anyObjectNum is UInt // true
anyObjectNum is Double // true
anyObjectNum is Float // true
你什麼錯誤得到?看起來像你有幾個無與倫比的parens和拼寫錯誤.. – Thilo 2014-10-27 05:25:53