Ich habe eine Klasse namens ObjectManager
, die generischen Typ O: Object, Persistable
hat. Auf diese Weise kann ich eine Klasse haben, die mit mehreren verschiedenen Unterklassen des Realms Object
arbeiten kann. Aber das Problem ist in der letzten Zeile cache = O(message: "hello world")
der Fehler ist: Falsche Argument Label-Aufruf (hat ‚Nachricht:‘ erwartete ‚Wert:‘)Wie benutzerdefinierte Initialisierung für ein Realm-Objekt in einer Klasse mit generischem Typ verwenden?
Bei der Eingabe es mir zeigt, dass ich initializer von Persistable
-Protokoll verwenden kann , aber beschweren Sie sich beim Kompilieren, dass es einen Initialisierer von Object
Klasse erwartet. Ist es möglich, einen persistenten Initialisierer zu erzeugen?
protocol Persistable {
init(message: String)
}
class CustomObject: Object, Persistable {
dynamic var message: String = ""
required convenience init(message: String) {
self.init()
self.message = message
}
}
class ObjectManager<O>: NSObject where O: Object, O: Persistable {
var cache: O?
func didReceive(message: String) {
cache = O(message: "hello world")
}
}
Hmm, ich weiß nicht, ob ich es richtig zu machen, aber es auf diese Weise, nicht funktioniert 'letzte Klasse CustomObject setzen: Object, Persistable { }' –
Ach, hatte ich das 'O geändert: Object' Constraint zu 'O: CustomObject' und änderte es nicht zurück. In diesem Fall möchten Sie den Initialisierer durch eine statische Factory-Methode ersetzen (z. B. Protokoll persistable {static func factory (message: String) -> Self} '). Das funktioniert auch dann korrekt, wenn die Version mit den Initialisierungen fehlschlägt. – AustinZ
Ok, das funktioniert, danke. Vielleicht können Sie die Antwort aktualisieren. –