我有以下代码:斯威夫特 - 如何定义一个类型约束保证类型有一个初始化
struct MyStruct {
var v: Int = 1
}
func createInstance<T: Any>(type: T.Type) -> T
{
return type.init()
}
let myType = MyStruct.self
let instance = createInstance(type: myType)
这不工作,因为我不保证,将T有一个初始化。
Playground execution failed: error: MyPlayground.playground:76:12: error: type 'T' has no member 'init'
return type.init()
^~~~ ~~~~
但是我如何定义一个约束来保证类型有一个init?
您可以使用这些结构和类必须实现的'Initializable'协议吗? – NRitH
你的意思只是一个空的协议,他们必须实现?嗯有点奇怪,但它听起来像一个很好的伎俩:)我会试试看。 – Dareon
你到底用'createInstance(type:)'实现了什么?有一个原因是标准库中没有'DefaultConstructible'(或类似的)协议 - 没有任何伴随的语义,*只是*可初始化没有意义。我建议读一读[协议不仅仅是语法](https://oleb.net/blog/2016/12/protocols-have-semantics/)。 – Hamish