2016-11-29 60 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