2016-09-06 58 views
8

關鍵字is相當於isKindOfClassisMemberOfClass在夫特

但我無法找到是什麼在迅速相當於isMemberOfClass

注: 我的問題是不是isKindOfClassisMemberofclass,而這個問題是關於什麼是isMemberofClass在斯威夫特

等價的區別

有人請澄清

+0

[isKindOfClass和isMemberOfClass之間的iPhone SDK差異]的可能的複製(http://stackoverflow.com/questions/3653929/iphone-sdk-difference-between-iskindofclass-and-ismemberofclass) – Tj3n

+5

無其不重複因爲我正在查詢相當於** isMemberOfClass ** –

+1

然後檢查[this](http://stackoverflow.com/q/25476740/6541007)。 – OOPer

回答

9

您正在尋找type(of:)(以前.dynamicType在Swift 2中)。

實施例:

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

使用type'錯誤的未解決的標識符'得到投擲 –

+1

您使用斯威夫特2.在斯威夫特3這是'型(作者:C)'斯威夫特1 2它是'c.dynamicType' – Grimxn

+0

謝謝你救了我的一天! –

0

在可選可變type(of:)返回從初始化的類型的情況下。

例子:

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 

我的班是從NSObject繼承,所以我用它的可變classForCoder,它爲我工作。

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

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