Лучший способ проверить экземпляр вида из списка классов? - PullRequest
0 голосов
/ 01 мая 2018

В настоящее время в 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
}
...

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Согласно вашему комментарию, похоже, вам нужно проверить, если ваш 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
    }
0 голосов
/ 13 мая 2018
class MyClassOne: MyClassNumber { }
class MyClassTwo: MyClassNumber { }
class MyClassThree: MyClassNumber { }

Inherit all class from one class and than check after that like

    if anyInstance is BaseClass{
    }
0 голосов
/ 01 мая 2018

Если я подумаю об этом логически, было бы намного разумнее определить для них суперкласс / протокол, что-то вроде этого:

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
}

Не вижу ни одного варианта использования для вашего

...