Swift 3.将Any转换为符合特定协议的类

时间:2017-03-11 09:37:03

标签: swift swift-protocols

我有一个随机协议作为例子

protocol testP {
    init(param1: String)
}

我有一个课程,以Any为参数作为例子:

class testC {
    var aClass: Any
}

如何检查aClass是否符合协议testP,如果符合,请使用协议初始化程序创建新对象,例如:

let newObject = aClass(param1: "Hello World!")

请帮助

1 个答案:

答案 0 :(得分:1)

您可以使用if-let

将其作为其他类型检查进行测试
protocol TestP {
    init(param1: String)
}

class TestC {
    var aClass: Any

    init(_ aClass: Any) {
        self.aClass = aClass
    }
}

class MyClassA: TestP {
    required init(param1: String) {
        //
    }
}

class MyClassB {

}

let containerA = TestC(MyClassA.self)

let containerB = TestC(MyClassB.self)

if let testPType = containerA.aClass as? TestP.Type {
    var a = testPType.init(param1: "abc")
    print(a) //->MyClassA
}

if let testPType = containerB.aClass as? TestP.Type {
    print("This print statement is not executed")
}

顺便说一句,如果您只将班级类型分配给aClass,请考虑使用AnyClassAny.Type