Any AnyObject
Swift 提供了2种特殊的类型: Any AnyObject
Any:可以代表任意类型(枚举 结构体 类 也包括函数类型)
AnyObject: 可以代表任意类类型(在协议后面写上:AnyObject代表只能类能遵守这个协议)
//var date = [Any]()
var date = Array<Any>()
date.append(1)
date.append(2.2)
date.append("abc")
date.append({10})
元类型
class Person {
var age : Int = 0
}
class Student: Person {
var name:Int = 0
var no: Int = 0
}
print(class_getInstanceSize(Student.self)) // 40 (16+8+(8+8))
print(class_getSuperclass(Student.self)!) // Person
print(class_getSuperclass(Person.self)!) // _TtCs12_SwiftObject
Swift 基类 https://github.com/apple/swift/blob/main/stdlib/public/runtime/SwiftObject.h
SWIFT_RUNTIME_EXPORT @interface SwiftObject<NSObject> {
@private
Class isa;
SWIFT_HEAPOBJECT_NON_OBJC_MEMBERS;// 引用计数器和属性信息
}
Self一般用作放会值类型 限定返回值跟方法调用者 必须是同一个类型(也可以做为参数类型)
protocol Runnable{
func run() -> Self
}
class Father : Runnable {
required init(){}
func run() -> Self {
return type(of: self).init()
}
}
class Sun :Father {}
let fa = Father()
fa.run() // Father
let sun = Sun()
sun.run() // Sun
如果Self用类中,要求返回调用的初始化是required的