据我所知,似乎共识是Swift关键字中的is
与isKindOfClass
方法同义。
但是,我无法让以下工作:
//inside of a method in UITabViewController
//check if the currently selected tab is ActivityViewController
if selectedViewController is ActivityViewController {
print("isActivity")
} else {
print("isNotActivity")
}
//same check
if selectedViewController?.isKindOfClass(ActivityViewController) != nil {
print("isActivity")
} else {
print("isNotActivity)
}
当调用此代码块时,我确保我在ActivityViewController
标签中。 isKindOfClass
是正确的,selectedViewController is ActivityViewController
不是。关于这是为什么的任何想法?
答案 0 :(得分:7)
is
和isKindOfClass
不是同义词,例如,请参阅
Is there a difference between "is" and isKindOfClass()?
但是,在您的情况下,问题是可选链接。
selectedViewController?.isKindOfClass(ActivityViewController)
如果调用不,则返回Optional<Bool>
nil
制作(因为selectedViewController
是nil
),而非nil
另有价值。所以
selectedViewController?.isKindOfClass(ActivityViewController) != nil
如果可以进行调用,则为真,无论是否
返回值为true
或false
。
使用
if selectedViewController?.isKindOfClass(ActivityViewController) == true { ... }
你会得到预期的结果。