2016-09-06 6 views
8

Słowo kluczowe is jest równoważne isKindOfClass.isMemberOfClass w Swift

Ale nie jestem w stanie znaleźć tego, co jest odpowiednikiem isMemberOfClass w szybkim tempie.

Uwaga: Moje pytanie nie jest o różnicy między isKindOfClass lub isMemberofclass raczej pytanie o to, co jest odpowiednikiem isMemberofClass w Swift

ktoś proszę wyjaśnić

+0

Możliwy duplikat [iPhone SDK różnicy między isKindOfClass i isMemberOfClass] (http://stackoverflow.com/questions/3653929/iphone-sdk-difference-between-iskindofclass-and-ismemberofclass) – Tj3n

+5

Brak Jej nie powielać ponieważ pytam o odpowiednik ** isMemberOfClass ** –

+1

Następnie sprawdź [to] (http://stackoverflow.com/q/25476740/6541007). – OOPer

Odpowiedz

9

Szukasz type(of:) (poprzednio .dynamicType w Swift 2).

przykład:

class Animal {} 
class Dog : Animal {} 
class Cat : Animal {} 

let c = Cat() 

c is Dog // false 
c is Cat // true 
c is Animal // true 

// In Swift 3: 
type(of: c) == Cat.self // true 
type(of: c) == Animal.self // false 

// In Swift 2: 
c.dynamicType == Cat.self // true 
c.dynamicType == Animal.self // false 
+0

użycie nierozwiązanego identyfikatora Błąd typu "type" zostaje rzucony –

+1

Używasz Swift 2. W Swift 3 jest to 'type (of: c)' w Swift 1 & 2 to było 'c.dynamicType' – Grimxn

+0

Dzięki, że uratowałeś mój dzień! –

0

W przypadku opcjonalnego zmiennej type(of:) powraca typ z inicjalizacji.

Przykład:

class Animal {} 
class Cat : Animal {} 

var c: Animal? 
c = Cat() 

type(of: c) // _expr_63.Animal>.Type 
type(of: c) == Cat?.self // false 
type(of: c) == Animal?.self // true 

Moja klasa została odziedziczona NSObject, więc użyłem jej zmienna classForCoder i pracował dla mnie.

class Animal : NSObject {} 
class Cat : Animal {} 

var c: Animal? 
c = Cat() 
c?.classForCoder == Cat.self // true