ich folgenden Code haben:Swift - wie eine Art Zwang zu definieren, die die Art garantieren eine init hat
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)
Das funktioniert nicht, weil ich nicht garantieren, hat die T eine init.
Playground execution failed: error: MyPlayground.playground:76:12: error: type 'T' has no member 'init'
return type.init()
^~~~ ~~~~
Aber wie kann ich eine Einschränkung definieren, die die Art eines init hat garantiert?
Können Sie ein 'Initializable'-Protokoll haben, das diese Strukturen und Klassen implementieren müssen? – NRitH
Meinst du nur ein leeres Protokoll das sie implementieren müssen? Hm ein bisschen seltsam, aber es klingt wie ein netter Trick :) Ich werde es versuchen. – Dareon
Was genau versuchen Sie mit 'createInstance (type))' zu erreichen? Es gibt einen Grund dafür, dass es in der Standardbibliothek kein 'DefaultConstructible' (oder ähnliches) Protokoll gibt - ohne begleitende Semantik ist * nur * initialisierbar, ist das nicht sinnvoll. Ich würde empfehlen zu lesen [Protokolle sind mehr als Taschen der Syntax] (https://oleb.net/blog/2016/12/protocols-haves-semantics/). – Hamish