Swift和isKindOfClass()之间的区别?

Sve*_*uer 2 swift

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

if someInstance is SomeClass {
}

if someInstance.isKindOfClass(SomeClass)  {
}
Run Code Online (Sandbox Code Playgroud)

new*_*cct 5

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

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