Swift 3. 将任何类型强制转换为符合特定协议的类

3

我有一个例子,是一个随机协议

protocol testP {
    init(param1: String)
}

我有一个类,以Any作为参数,举例说明:

class testC {
    var aClass: Any
}

我该如何检查 aClass 是否符合协议 testP,如果符合,使用协议的初始化器创建一个新对象,例如:
let newObject = aClass(param1: "Hello World!")

请帮忙


1
你是将符合 testP 协议的类型的实例分配给 aClass,还是将符合 testP 协议的类型的元类型分配给它? - Hamish
这种协议的目的不就是为了在编译时写var aClass: testP来进行所有这些检查吗? - vadian
1个回答

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

谢谢!完美运行。 - Yury Loginov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接