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



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

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

我还收到警告,指出:

警告:从"UILabel"到"UIView"的条件转换总是成功的。

问题

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

试试这个:

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

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

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

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

最新更新