Я прочитал встроенную документацию 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
или почему компилятор считает, что они есть?