检查实例的更好方法是从 类 列表中选择?
Better way to check the instance is kind from list of classes?
目前在 swift 中,我们可以使用 'is' 运算符检查实例的 class 类型。
例如:
....
guard anyInstance is MYClass else {
return
}
....
在我的例子中,我需要将同一个实例与多个 class 类型进行比较,
例如:
...
if anyInstance is MyClassOne ||
anyInstance is MyClassTwo || anyInstance is MyClassThree {
return
}
...
swift有没有更好的方法来写这种条件?像
....
if anyInstance is (MyClassOne, MyClassTwo, MyClassThree) {
return
}
...
如果我从逻辑上考虑,为它们定义一个超类/协议会更有意义,像这样:
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
}
看不到您的任何用例
根据您的评论,您似乎需要它来检查您的 anyInstance
是否来自 UIViewController
列表,那么您不想调用 dismiss()
:
There are no any method, where you can pass the array as:
if anyInstance is (MyClassOne, MyClassTwo, MyClassThree) {
return
}
But, You can use the switch statement to perform this as:
suppose anyInstance
is your class object
switch anyInstance {
case is MyClassOne, is MyClassTwo ,is MyClassThree:
print("one is either from MyClassOne, MyClassTwo, MyClassThree")
default:
break
}
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{
}
目前在 swift 中,我们可以使用 'is' 运算符检查实例的 class 类型。 例如:
....
guard anyInstance is MYClass else {
return
}
....
在我的例子中,我需要将同一个实例与多个 class 类型进行比较, 例如:
...
if anyInstance is MyClassOne ||
anyInstance is MyClassTwo || anyInstance is MyClassThree {
return
}
...
swift有没有更好的方法来写这种条件?像
....
if anyInstance is (MyClassOne, MyClassTwo, MyClassThree) {
return
}
...
如果我从逻辑上考虑,为它们定义一个超类/协议会更有意义,像这样:
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
}
看不到您的任何用例
根据您的评论,您似乎需要它来检查您的 anyInstance
是否来自 UIViewController
列表,那么您不想调用 dismiss()
:
There are no any method, where you can pass the array as:
if anyInstance is (MyClassOne, MyClassTwo, MyClassThree) {
return
}
But, You can use the switch statement to perform this as:
suppose
anyInstance
is your class object
switch anyInstance {
case is MyClassOne, is MyClassTwo ,is MyClassThree:
print("one is either from MyClassOne, MyClassTwo, MyClassThree")
default:
break
}
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{
}