我有2个班:
class Parent { func a() { self.b() } func b() { // I want to check here if self is Parent // warning "'is' test is always true" { log("instance of parent") } } } class Child:Parent { }
我想这样检查一下
// var child = Child() child.a() // don't see log var parent = Parent() parent.a() // see log
我知道我可以description
在超类中创建一个方法,并在子类中覆盖它.我想知道Swift是否可以在没有工具的情况下检查它description
谢谢你的帮助
它非常简单,使用is
关键字.
if child is Child
这可以使用as
类型转换操作符来完成:
var child = Child() if let child = child as? Child { //you know child is a Child } else if let parent = child as? Parent { //you know child is a Parent }
还有is
关键字:
if child is Child { //is a child }
请注意,在你的代码,你看到使用警告is
-它永远是真实的,因为相比self
于Parent
从内部类Parent
总是会true
.如果您将它与某个类的其他实例进行比较而不是self
,或者如果您正在与其他类型进行比较Parent
,则此警告将消失.
我建议在iBooks商店的Swift Programming Language一书中阅读更多相关内容 - 请参阅Type Casting一章.