2015-06-10 11 views
1

我想存儲一個類型的引用,以便稍後與一個對象進行比較。如何存儲一個類引用並將其與swift中的實例進行比較?

我試圖做的:

let myClassRef = AClass.self // store a reference to the type of AClass 
if myObject is myClassRef { 
    // Do something 
} 

但它是行不通的。如何使用AnyClass對象? 或者,如何從一個實例得到一個AnyClass對象(這產生相同的結果,我所期待)

回答

1

讓您Aclass子類的NSObject &使用isMemberOfClass()

let myClassRef = AClass.self // store a reference to the type of AClass 

if myObject.isKindOfClass(myClassRef) { 
// Do something 
} 
+0

它確實比較「Swift.ImplicitlyUnwrappedOptional 」 到 「可選(itooch_messenger.SearchUserViewController)」 因此,比較永遠是錯誤的。有沒有辦法獲得真正的類型? – Antzi

+0

讓你的課,'NSO​​bject'的子類 – itsji10dra

+1

非常感謝。我想迅速在內省方面仍有一些進展。當心'isKindOfClass' vs'isMemberOfClass' – Antzi

2

爲了避免子類NSObject你可以使用dynamicType

let myClassRef = AClass.self 

if myObject.dynamicType === myClassRef { 
    // ... 
} 
+0

在這種情況下,我比較Uiview控制器,所以沒關係。 +1的===也許這就是我錯過的! – Antzi

+0

這隻會測試對象的類型是否正好;而不是其子類 – newacct

0

它並不需要繼承NSObject

如果myObject是類型AnyObject,你可以這樣做:

import Foundation 

let myClassRef = AClass.self 
let myObject : AnyObject = BClass() 
if myObject.isKindOfClass(myClassRef) { 
    // Do something 
} 

如果myObject是一個特定的類或接口類型,你可以將它轉換爲AnyObject第一:

import Foundation 

let myClassRef = AClass.self 
let myObject = BClass() 
if (myObject as AnyObject).isKindOfClass(myClassRef) { 
    // Do something 
} 
相關問題