有没有办法阻止UILabel作为UIView进行类型检查?

时间:2016-02-16 00:04:06

标签: swift typechecking

在我的应用程序中,我使用as运算符来检查我正在使用的UI元素类型。我遇到了UILabel成功检查视图的问题。

let label = UILabel()
label.text = "some text"

if let myLabel = label as? UIView {
    print("its a view ") // succeeds
}

我还收到警告:

  

警告:从'UILabel'到'UIView'的有条件演员总是成功。

问题

是否有办法向此as检查添加约束,导致此检查按预期失败?

2 个答案:

答案 0 :(得分:1)

试试这个:

if label.isMemberOfClass(UIView.self) {
    print("its a view ") // succeeds
}

isMemberOfClass检查UIView并且没有从中继承的类

答案 1 :(得分:0)

这是另一种方法,这是我在特定情况下所需要的方法,因为我试图检查通用(T)。由于我没有在问题中指明,我不会接受这个作为答案,但这是解决方案:

if let label = obj as? UILabel where label.isMemberOfClass(UILabel.self) {
    // ...
}

if let view = obj as? UIView where view.isMemberOfClass(UIView.self) {
    // ...
}