我有一个像这样的数组:
static var handlers: [MyProtocol.Type] = [Handler1.self, Handler2.self]
处理程序1,2等等是继承自BaseHandler的对象。现在我在返回对象的实例时遇到了一些麻烦。例如,我想这样做:
func getHandler(_ idx: Int) -> MyProtocol.Type? {
let handler: BaseHandler.Type = handlers[0] as! BaseHandler.Type
return handler()
}
我收到编译错误,说#34;无法调用' handler'没有参数"。但是BaseHandler有一个没有参数的init函数。有什么想法吗?
答案 0 :(得分:1)
简答:您可以使用init
,但您可能希望在协议中将其正式化。
示例强>
protocol MyProtocol {
init()
func f() -> Int
}
struct MyStruct: MyProtocol {
// This struct gets an automatic no-arg constructor
func f() -> Int { return 12 }
}
let ps: [MyProtocol.Type] = [ MyStruct.self ]
ps[0].init().f() // 12