結(jié)論:
1谷醉、AnyObject:代表任意類的實(shí)例俱尼,類的類型萎攒,僅類遵守的協(xié)議
2、 Any:代表任意類型刃永,包括function類型或者Optional類型
3羹应、 AnyClass:代表任意實(shí)例的類型(AnyObject.Type) 類型
AnyObject
通過代碼來看具體結(jié)果
class LTTech{
? ? var?age = 10
}
var?t = LTTech()
var t1: ?AnyObject = t ?
var t2: ?AnyObject = LTTech.self?
輸出內(nèi)容如下:
protocol MyProtocol1: AnyObject {
}
class LTTech3: MyProtocol1 {
}
struct LTTech3: MyProtocol1 {
}
通過編譯可知,當(dāng)協(xié)議繼承AnyObject后劫灶,只有類可遵守該協(xié)議(struct是不可遵守的)
Any:
let?array: [Any] = [1,"a"]
let?array1: [AnyObject] = [1,"a"]
通過結(jié)果可知掖桦,Any可代表任意類型(包括function,Optional)
Any包含AnyObject
AnyClass:
let?tech=LTTech()
let any: AnyClass = tech.self
let any1: AnyClass = LTTech.self
let any2: AnyClass = tech.self.self
通過編譯結(jié)果可知:AnyClass = AnyObject.Type
即:代表任意實(shí)例的類型
T.self : T是實(shí)例對象涌穆,當(dāng)前T.self返回的就是他本身宿稀;如果T是類,當(dāng)前T.self返回的就是元類型
let?t =LTTech()
let?t1 = t.self
let?t2 = t.self.self
lett3 =LTTech.self
通過po t1,t2可知 t1即為t祝沸,t2也為t罩锐;即:t為實(shí)例對象是,當(dāng)前t.self返回的就是他本身
通過匯編代碼涩惑,任何讀取t3對應(yīng)的值竭恬,上圖表明當(dāng)t為類,當(dāng)前t.self返回的就是元類型
Self
Self的一般用法
1:作為方法返回值萍聊,代表當(dāng)前類悦析;
2:協(xié)議返回Self,Self代表遵循該協(xié)議的類
class LTTech3{
? ? static?let?age=10
? ? //Self沒有特別用意 Self作為方法的返回類型
? ? func?test() ->Self{
? ? ? ? //當(dāng)前實(shí)例對象
? ? ? ? return self
? ? }
}
protocol MyProtocol {
? ? //Self代表遵循該協(xié)議的類
? ? func?get() ->Self
}
class LTTech5: MyProtocol{
? ? func get() -> Self{//當(dāng)前Self指代遵循協(xié)議的類型LTTech5
? ? ? ? return self
? ? }
}
let tech5 = LTTech5()
print(tech5.get()) //SwiftMirror.LTTech5