2016-08-19 2 views
0

Ich versuche zu verstehen, wie eine Protokollkonformität zu einer Instanz hinzugefügt wird, wenn die Instanz einen bestimmten Wert hat. Dies ist ein "dummes" Beispiel dessen, was ich zu verstehen versuche.Swift-Protokolle: Hinzufügen von Protokollkonformität zu einer Instanz

enum TypeOfFigure { 
    case square, circle, triangle 
} 

protocol Figure { 
    var type: TypeOfFigure { get } 
} 
protocol Square {} 
protocol Circle {} 
protocol Triangle {} 


class FigureType: Figure { 
    let type: TypeOfFigure 

    init (type: TypeOfFigure) { 
     self.type = type 
     switch type { 
     case .square: //extension self: Square {} 
     case .circle: //extension self: Circle {} 
     case .triangle: //extension self: Triangle {} 
     } 
    } 

} 

Antwort

4

Ich schlage vor, einen alternativen Ansatz

Sie eine Factory-Methode verwenden können:

class FigureTypeFactory { 
    static func createFigure(withType type: TypeOfFigure) -> Figure { 
     switch type { 
      case .square: return new FigureSquare() 
      case .circle: return new FigureCircle() 
      case .triangle: return new FigureTriangle() 
     } 
    } 
} 

class Figure { } 

class FigureSquare: Figure, Square { } 
+0

Viel besser Ansatz IMO. –

+0

Danke, das ist mein Ansatz, aber in diesem Fall muss ich zu viele Klassen deklarieren, ich suchte nach etwas mehr cincise. –

+0

@AndreaMiotto Können Sie Ihren Beitrag mit den Methoden/Eigenschaften dieser Protokolle aktualisieren? Dies kann mir helfen, andere Lösungen –

1

Ab "The Swift Programming Language": kann

Das Protokoll dann durch eine Klasse, Struktur oder Aufzählung übernommen werden, um eine tatsächliche Implementierung bereitzustellen dieser Anforderungen. Jeder Typ, der die Anforderungen eines Protokolls erfüllt, soll diesem Protokoll entsprechen.

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html

So können Sie nicht Protokollkonformität auf eine bestimmte Instanz hinzufügen.

Verwandte Themen