2015-06-10 7 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

Сделайте свой класс, подкласс «NSObject» – itsji10dra

+1

Большое спасибо. Наверное, быстро все еще есть прогресс на фронте самоанализа. Остерегайтесь 'isKindOfClass' vs' isMemberOfClass' – Antzi

2

Чтобы избежать необходимости подкласс NSObject вы могли бы использовать dynamicType:

let myClassRef = AClass.self 

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

В этом случае я сравниваю Uiviewcontrollers, так что все в порядке. +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 
}