从类列表中检查实例的更好方法是什么?

时间:2018-05-01 10:05:09

标签: ios swift swift3

目前在swift中我们可以使用'is'运算符来检查实例的类类型。 例如:

....
guard anyInstance is MYClass else {
    return
}
....

在我的情况下,我需要将同一个实例与多个类类型进行比较, 例如:

...
    if anyInstance is MyClassOne ||
          anyInstance is MyClassTwo || anyInstance is MyClassThree {
          return
        }
...

有没有更好的方法快速为条件写这种?

之类的东西
....

if anyInstance is (MyClassOne, MyClassTwo, MyClassThree) {
return
}
...

2 个答案:

答案 0 :(得分:1)

如果我从逻辑上考虑它,为它们定义超类/协议会更有意义,如下所示:

class MyClassNumber { }

class MyClassOne: MyClassNumber { }
class MyClassTwo: MyClassNumber { }
class MyClassLetter { }

let one = MyClassOne()
let two = MyClassTwo()
let letter = MyClassLetter()

if one is MyClassNumber {
    // TRUE
}

if two is MyClassNumber {
    // TRUE
}

if letter is MyClassLetter {
    // FALSE
}

请勿查看您的任何用例

答案 1 :(得分:0)

根据您的评论,您似乎需要检查anyInstance是否来自UIViewController列表,然后您不想致电dismiss()

  

没有任何方法可以将数组传递为:

if anyInstance is (MyClassOne, MyClassTwo, MyClassThree) {
    return
}
  

但是,您可以使用switch语句执行此操作:

     

假设anyInstance是您的类对象

    switch anyInstance {
    case is MyClassOne, is MyClassTwo ,is MyClassThree:
        print("one is either from MyClassOne, MyClassTwo, MyClassThree")
    default:
        break
    }