Ich würde gerne wissen, was das Protokoll entspricht für einen Initialisierer in einer einfachen Klasse, die nur Initialisierungsfunktionalität enthält und nur in einer konkreten Klasse erweitert werden soll.Protokoll Extension Initialisierer
So wahrscheinlich die einfachste ist es, den Code zu erhalten - ich bin für die Protokollerweiterung Äquivalent der folgenden Suche:
import UIKit
class Thing {
var color:UIColor
init(color:UIColor) {
self.color = color
}
}
class NamedThing:Thing {
var name:String
init(name:String,color:UIColor) {
self.name = name
super.init(color:color)
}
}
var namedThing = NamedThing(name: "thing", color: UIColor.blueColor())
ich den Code erwartet zu etwa so aussehen:
protocol Thing {
var color:UIColor {get set}
}
extension Thing {
init(color:UIColor) {
self.color = color
}
}
class NamedThing:Thing {
var name:String
var color:UIColor
init(name:String,color:UIColor) {
self.name = name
self.init(color:color)
}
}
Ich habe Lösungen gesehen, die in anderen StackOverflow-Fragen vorgeschlagen wurden (zB How to define initializers in a protocol extension?), aber ich bin mir nicht sicher, ob sie das Problem der zusätzlichen Parameter im Klasseninitialisierer behandeln oder spezifisch behandeln.
Übereinstimmung mit AnyObject uns redundant, implizit unverpackten Namen und Farbe ist Gefahr und nicht erforderlich (setzen Sie stattdessen die Standardwerte) – user3441734
Vielen Dank für Ihre aufschlussreichen Kommentare, Sie scheinen in ähnlichen Straßenblockaden, die ich hatte. Ich stimme deinem Kommentar zu, ob es sich lohnt. Ich denke, ich suche nach der Best-Practice-Implementierung des obigen Problems in einem protokollorientierten Ansatz. Wenn ich entweder Standardwerte angeben oder sie implizit unverpackt machen möchte, erscheint es mir weder zu praktisch noch zu bewährten Praktiken, und ich frage mich, ob das nach Protokoll riecht, ist nicht der richtige Ansatz für dieses Problem. @ alain-t Können Sie Ihren Kommentar zu einer Delegiertenklasse mit einem Codebeispiel ausfüllen? –
@CraigGrummitt Alle Variablen (und/oder Konstanten) in swift müssen einen gewissen Wert haben, bevor sie verwendet werden (für den Referenztyp, der in Swift als eine Klasse dargestellt wird, ist der Wert eine Referenz, für Werttypen ist es der Wert self). direktes Äquivalent von Null existiert nicht Swift. var i = Optional() hat den Standardwert nil. var j = ImplicitlyUnwrappedOptional () gibt Ihnen das gleiche Ergebnis (beide sind enum 'type') .... (weiter unten) –
user3441734