在Swift中是否有[SomeClass类]的等价语法?

时间:2014-08-16 09:08:17

标签: objective-c swift

在Objective-C中,我可以像[SomeClass class]一样使用这种语法来获取某些类的类类型,例如:

if ([someInstance isKindOfClass:[SomeClass class]]) {
       // do something
}

但是,我如何在Swift中做同样的事情?

谢谢!

2 个答案:

答案 0 :(得分:8)

在Swift中,类不会自动拥有基类。除非您使用isKindOfClass,否则无法使用NSObject 您的类是is的子类。

要检查实例是否为子类型,请使用class Animal {} class Dog: Animal { func bark() { println("woof!") } } class Cat: Animal { func meow() { println("mew!") } } var fluffy:Animal = Cat() if fluffy is Dog { println("fluffy is a dog") } else if fluffy is Cat { println("fluffy is a cat") } 运算符:

Cat

问题是,即使您知道蓬松meow(),您仍然需要将其强制转移到(fluffy as Cat).meow()

let mycat = fluffy as Cat
mycat.meow()

或:

as?

在Swift中,通常用if let mydog = fluffy as? Dog { mydog.bark() } else if let mycat = fluffy as? Cat { mycat.meow() } 来检查子类,如下所示:

as

或者在switch语句中使用switch fluffy { case let mydog as Dog: mydog.bark() case let mycat as Cat: mycat.meow() default: println("something else") }

{{1}}

答案 1 :(得分:1)

正确的语法是

if someInstance.isKindOfClass(SomeClass)