使用类型为swift类调用初始化程序

时间:2017-01-30 20:41:50

标签: swift

我有一个像这样的数组:

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函数。有什么想法吗?

1 个答案:

答案 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