nehme ich an protokollorientierte Programmierung tun wollen, und ich habe Protokolle:Satisfying Mitglied erklärt in Protokoll mit Mitglied des Subtyps oder konformen Typ
protocol BehaviorA {
var date: NSDate {get}
var name: String {get}
}
protocol BehaviorB {
var creationInfo: BehaviorA {get}
}
Ich möchte eine Version dieses Eigentumsmodell mit umgesetzt haben die Kerndaten. Die Kerndaten will eine spezielle Klasse für jedes Modell Einheit, so erstelle ich eine Klasse ActualA
und ActualB
:
class ActualA: NSManagedObject, BehaviorA {
@NSManaged var date: NSDate
@NSManaged var name: String
}
class ActualB: NSManagedObject, BehaviorB {
@NSManaged var creationInfo: ActualA
}
Wegen des Datenmodells Beziehung, die var vom Typ ActualA. Ich erhalte jedoch einen Kompilierungsfehler, der besagt, dass ActualB
nicht mit BehaviorB
übereinstimmt, und es geht weg, wenn ich die creationInfo
als BehaviorA
neu eintippe.
Allerdings würde ich erwarten, dass es eine Möglichkeit gibt zu sagen, diese Variable erfüllt das Protokoll Mitglied, weil sein Typ mindestens so restriktiv ist wie im Protokoll deklariert. Kann ich das irgendwie machen? Irgendwelche PoP-Fans haben Ratschläge, wie man Protokolle erreicht, die einander besitzen, aber die konformen Typen möchten spezifisch sein?
Danke für diese Info, wusste ich nicht über zugehörige Typen. Das macht sehr viel Sinn, aber als ich es ausprobiert habe, habe ich "Property kann kein Mitglied eines @objc-Protokolls sein, weil sein Typ nicht in Objective-C repräsentiert werden kann". Ich habe das '@ objc' Attribut auf' BehaviorB' weil es eine Voraussetzung für die Dependency-Injection-Bibliothek ist, die ich benutze. Irgendeine Möglichkeit, beides zuzulassen? – Quintana
basierend auf http://stackoverflow.com/questions/36228546/protocol-with-associatedtype-doesnt-play-nice-with-optional Ich glaube, dass es nicht möglich ist. Ich werde nach einer Problemumgehung suchen. – Quintana