元类型、AnyClass、Self - ShenYj/ShenYj.github.io GitHub Wiki
- 代表任意类的
instance, 也就是实例对象 - 类的类型
- 仅类遵守的协议 (Class-Only Protocols)
- 代表任意类型, 包括
function和optional类型
-
代表任意实例的类型:
AnyObject.Typepublic typealias AnyClass = AnyObject.Type
- 如果
T是实例对象,T.self返回的就是它本身 - 如果
T是类, 那么T.self返回的就是Metadata
- 一种类型,
T.self是T.Type类型
- 用来获取一个值的动态类型
- 类
class Person {
var age: Int = 1
}
func test(_ value: Any) {
print(type(of: value))
}
let p = Person()
test(p) // 此时输出: Person, 编译期间是Any类型, 运行时获取到了实际类型- 协议
protocol Sayable: AnyObject {
}
class Person: Sayable {
var age: Int = 1
}
func test(_ value: Sayable) {
let valueType = type(of: value)
print(valueType)
}
let p1 = Person()
let p2: Sayable = Person()
test(p1) // Person
test(p2) // Person- 协议&泛型
protocol Sayable: AnyObject {
}
class Person: Sayable {
var age: Int = 1
}
func test<T>(_ value: T) {
let valueType = type(of: value)
print(valueType)
}
let p1 = Person()
let p2: Sayable = Person()
test(p1) // Person
test(p2) // Sayable有协议&泛型的参与, 默认情况下type(of:)无法拿到真实类型
通过type(of: value as Any)处理后, 即可获取到真实类型