下列表達式之間是否有區別?Swift is和isKindOfClass()之間的區別?
if someInstance is SomeClass {
}
if someInstance.isKindOfClass(SomeClass) {
}
下列表達式之間是否有區別?Swift is和isKindOfClass()之間的區別?
if someInstance is SomeClass {
}
if someInstance.isKindOfClass(SomeClass) {
}
我會假設.isKindOfClass()
是從可可實例方法。
is
右側可以是任何類型或協議,而的.isKindOfClass()
參數必須是引用類型(即類)。您也可以使用.conformsToProtocol()
而不是.isKindOfClass()
以相同方式測試是否符合@objc
協議。is
的左側是任何表達式,而.isKindOfClass()
的接收器必須是對象引用。如果表達式的編譯時間類不知道支持.isKindOfClass()
,編譯器會發出抱怨,但是您可以通過將左側轉換爲AnyObject
來解決此問題。所有Swift類在運行時實際上都支持.isKindOfClass()
。is
的右側是一個必須在編譯時進行硬編碼的類型。 .isKindOfClass()
的參數可以是一個變量或其他表達式,其值是在運行時計算的。
前者適用於任何Swift類型。後者要求'someInstance'響應'isKindOfClass'方法(通常通過使它成爲一個NSObject子類來實現)。 – Rob
你可以看看API文檔。 – NSDeveloper