从包含类的数组列表中检查“isKind(of :)”

时间:2018-02-14 03:38:50

标签: arrays swift uiviewcontroller

我有一组viewController类名,如(ViewController class 1,2,3 4)

 let classArray = [VCclass1, VCclass2, VCclass3, VCclass4]

我想检查对象属于类数组中提到的任何类,如

if obj.isKind(of:(Any of the classArray elements) ) {

 //do something

 } else {

//execute else condition

}

如何在这里写“if condition”?

3 个答案:

答案 0 :(得分:2)

好吧,您正在根据obj的类型查看您的数组是否包含成员。所以,contains(where:)非常合适:

if classes.contains(where: { type(of: obj) == $0 }) {
    //do something
} else {
    //execute else condition
}

答案 1 :(得分:2)

您可以通过简单的方式验证。

import Foundation
import UIKit

class A: UIViewController {}
class B: UIViewController {}
class C: UIViewController {}

let array:[UIViewController.Type] = [A.self,B.self,C.self]
let obj = A()

print(array.contains(where: { obj.isKind(of: $0) }))

输出应为true。您可以在Playground中运行此代码 但是我会为此目的推荐switch。在更复杂的场景中,您将想知道哪个类被赋予对象左右。

switch obj {
case is A:
    print("A")
case is B:
    print("B")
case is C:
    print("C")
default:
    print("none")
}

答案 2 :(得分:0)

试试这个:

<option value="Something">Something<option>

或丑陋的,少OOP方式......

extension NSObject {
    func isKind(of classes: [AnyClass]) -> Bool {
        for aClass in classes {
            if self.isKind(of: aClass) {
                return true
            }
        }
        return false
    }
}

let classes = [UIViewController.self]
let obj = UIViewController()

if (obj.isKind(of: classes)) {
    //do something
}