以下表达式之间有什么区别吗?
if someInstance is SomeClass {
}
if someInstance.isKindOfClass(SomeClass) {
}
答案 0 :(得分:5)
我将假设.isKindOfClass()
是来自Cocoa的实例方法。
is
的右侧可以是任何类型或协议,而.isKindOfClass()
的参数必须是引用类型(即类)。您也可以使用@objc
而不是.conformsToProtocol()
以同样的方式测试与.isKindOfClass()
协议的一致性。is
的左侧是任何表达式,而.isKindOfClass()
的接收方必须是对象引用。如果表达式的编译时类不知道支持.isKindOfClass()
,编译器会抱怨,但您可以通过将左侧强制转换为AnyObject
来克服此问题。所有Swift类实际上都在运行时支持.isKindOfClass()
。is
的右侧是必须在编译时进行硬编码的类型。 .isKindOfClass()
的参数可以是变量或其他表达式,其值在运行时计算。