我有以下代碼:斯威夫特 - 如何定義一個類型約束保證類型有一個初始化
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