Swift和isKindOfClass()之间的区别?

时间:2015-07-05 13:47:36

标签: swift

以下表达式之间有什么区别吗?

if someInstance is SomeClass {
}

if someInstance.isKindOfClass(SomeClass)  {
}

1 个答案:

答案 0 :(得分:5)

我将假设.isKindOfClass()是来自Cocoa的实例方法。

  • is的右侧可以是任何类型或协议,而.isKindOfClass()的参数必须是引用类型(即类)。您也可以使用@objc而不是.conformsToProtocol()以同样的方式测试与.isKindOfClass()协议的一致性。
  • is的左侧是任何表达式,而.isKindOfClass()的接收方必须是对象引用。如果表达式的编译时类不知道支持.isKindOfClass(),编译器会抱怨,但您可以通过将左侧强制转换为AnyObject来克服此问题。所有Swift类实际上都在运行时支持.isKindOfClass()
  • is的右侧是必须在编译时进行硬编码的类型。 .isKindOfClass()的参数可以是变量或其他表达式,其值在运行时计算。