Swift 3. Cast Любой класс, который соответствует определенному протоколу.
У меня есть случайный протокол в качестве примера
protocol testP {
init(param1: String)
}
И у меня есть класс, который принимают Any
в качестве параметра в качестве примера:
class testC {
var aClass: Any
}
Как я могу проверить, если aClass
соответствует протоколу testP
и если это так, создайте новый объект, используя инициализатор протокола, например:
let newObject = aClass(param1: "Hello World!")
Пожалуйста помоги
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
рассмотрите возможность использования AnyClass
или же Any.Type
,