Почему я могу иметь [AnyObject]
массив и поставить кучу разных размеров типов в нем ...Почему целые числа не соответствуют протоколу AnyObject?
var a = [AnyObject]()
a.append(Int(1))
a.append(Float64(3.14))
a.append(Bool(true))
... для Int32
и Int64
....
a.append(Int32(1)) // err: type 'Int32' does not conform to protocol 'AnyObject'
a.append(Int64(1)) // err: type 'Int64' does not conform to protocol 'AnyObject'
Документация, кроме для AnyObject
говорит:
«AnyObject может представлять собой экземпляр любого типа класса»
Но когда я приказываю кнопку мыши на Int
, Int32
или Int64
увидеть стандартное определение библиотеки этих типов, я вижу, что они все struct
значения.
В чем проблема? Почему это так устроено?
благодарю вас это замечательный ответ. Вы знаете, есть ли какая-либо документация о том, какие неявные преобразования Swift делают? Я предполагаю, что это выходит за рамки просто «NSInteger». –
Yup, это описано в [Использование Swift с Cocoa и Objective-C] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html#//apple_ref/doc/ uid/TP40014216-CH6-XID_42) iBook. Но просто имейте в виду, что он изменился в бета-версии Xcode 6.3, и книга отражает только поведение версии релиза, поэтому лучше всего проверить примечания к выпуску Xcode при попытке обновления. –
BTW Вы имеете в виду NSNumber, а не NSInteger? –