Я прочитал встроенную документацию Swift, и я немного смущен.
1) Any - это протокол, который все типы неявно соответствуют.
2) AnyObject - это протокол, к которому все классы неявно соответствуют.
3) Int, Float, Double являются structs
Вот пример кода:
import UIKit
func passAnyObject(param: AnyObject) {
print(param)
}
class MyClass {}
struct MyStruct {}
let a: Int = 1
let b = 2.0
let c = NSObject()
let d = MyClass()
let e = MyStruct()
passAnyObject(a)
passAnyObject(b)
passAnyObject(c)
passAnyObject(d)
//passAnyObject(e) // Argument type 'MyStruct' does not conform to expected type 'AnyObject'
if a is AnyObject { // b, d, e is also AnyObject
print("\(a.dynamicType) is AnyObject")
}
Я не понимаю, почему Int, Double, Float являются AnyObject s? Почему компилятор ничего не говорит? Эти типы объявляются как структуры. Struct MyStruct не может быть передан методу сверху, потому что он не соответствует AnyObject.
Не могли бы вы помочь мне понять, почему Int, Double и Float являются AnyObject или почему компилятор считает, что они есть?