2016-11-29 56 views
4

type(of: x)斯威夫特卡倫特3似乎並不與is類型檢查工作型斯威夫特3似乎並沒有與工作的類型檢查

它只是給出了這樣的錯誤消息:

一行上的連續語句必須用';'分隔

代碼示例:

class Test : UIViewController {} 

let test = Test() 
let test2 = Test() 
let isEqual = test2 is type(of: test) // this does not compile 

這裏有什麼問題?
如何在Swift 3中做這樣的動態類型檢查?

+2

你能幫型(作者:TEST2)'==類型(的:測試)' ? – Connor

+1

yes - 'type(of:test2)== type(of:test)'有效,但它不像is操作符那麼幹淨。但它能完成這項工作。 –

+0

這聽起來像你有一個X/Y問題。你爲什麼用'is'來檢查類型?爲什麼不使用條件向下轉換('if let x = y as?Foo {}')? – JAL

回答

0

在這個特定背景:

class Test : UIViewController {} 

class Test1 : UIViewController {} 

let test = Test() 
let test2 = Test1() 

let f = test2.isKind(of: test2.classForCoder) 

print(f) 

輸出:真

這可能是另一種想法覈對型號

除此之外

let q = type(of: test) == type(of: test) 

將返回true,但只有當這是同一類不是一個子類別

0

你在比較兩個不同類型的無比,除非你已經超負荷==處理這樣

test2type(of: test)這是行不通的。


由於康納說:

print(type(of: test)) // Test 
print(test2) // <__lldb_expr_22.Test: 0x7ffe8cb063e0> 

let isEqual = type(of:test2) == type(of: test) // true 
+5

這將僅爲*相同的*類型返回'true',而不是針對子類的實例。 –

+1

所以基本上我的0值在這裏對不對? :)因爲你留下了寶貴的評論,我只想在這裏留下答案。 :) – Honey