在Objective-C中,我可以像[SomeClass class]一样使用这种语法来获取某些类的类类型,例如:
if ([someInstance isKindOfClass:[SomeClass class]]) {
// do something
}
但是,我如何在Swift中做同样的事情?
谢谢!
答案 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)