"是" Swift中的关键字

时间:2015-09-28 18:41:45

标签: ios swift

据我所知,似乎共识是Swift关键字中的isisKindOfClass方法同义。

但是,我无法让以下工作:

//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不是。关于这是为什么的任何想法?

1 个答案:

答案 0 :(得分:7)

isisKindOfClass不是同义词,例如,请参阅 Is there a difference between "is" and isKindOfClass()?

但是,在您的情况下,问题是可选链接

selectedViewController?.isKindOfClass(ActivityViewController)
如果调用,则

返回Optional<Bool> nil 制作(因为selectedViewControllernil),而非nil 另有价值。所以

selectedViewController?.isKindOfClass(ActivityViewController) != nil
如果可以进行调用,则

为真,无论是否 返回值为truefalse

使用

if selectedViewController?.isKindOfClass(ActivityViewController) == true { ... }

你会得到预期的结果。