Mache eine Eigenschaft vom Typ und befolge das Protokoll in Swift

9

Ich würde gerne eine Eigenschaft machen, die einen bestimmten Typ hat und auch einem Protokoll entspricht, das ich in Objective-C so gemacht hätte:

%Vor%

Was ich suchen möchte, ist anzugeben, dass die Eigenschaft mit einem Objekt vom Typ UIViewController gesetzt werden kann, das auch CustomProtocol entspricht, damit klar ist, was die Basisklasse ist. Ich weiß, dass ich wahrscheinlich nur einen kurzen Klassenstub verwenden könnte, um die gleichen Ergebnisse zu erhalten, d. H.

%Vor%

Aber das scheint nicht der sauberste Weg zu sein.

    
sashimiblade 26.04.2015, 18:21
quelle

2 Antworten

7

Ich kann mir keinen guten Weg vorstellen, dies in Swift auszudrücken. Die Syntax für a Geben Sie Folgendes ein:

  

Typ → Array-Typ | Wörterbuch-Typ | Funktionstyp | Typkennung |   Tupel-Typ | optionaler Typ | implizit-unwrapped-optional-type |   Protokoll-Zusammensetzungs-Typ | Metatyp-Typ

Was Sie suchen, wäre eine Art protocol-combination-type , die auch eine Basisklasse akzeptiert. ( Protokoll-Kombinationstyp ist protocol<Proto1, Proto2, Proto3, …> .) Dies ist derzeit jedoch nicht möglich.

Protokolle mit zugehörigen Typanforderungen dürfen Typaliasen haben, die eine erforderliche Basisklasse und erforderliche Protokolle angeben, aber diese erfordern auch, dass die Typen zur Kompilierungszeit bekannt sind, daher ist es unwahrscheinlich, dass sie für Sie eine praktikable Option ist.

Wenn Sie wirklich daran interessiert sind, können Sie ein Protokoll mit den von Ihnen verwendeten Teilen der Schnittstelle von UIViewController definieren, eine Erweiterung zum Hinzufügen von Konformität verwenden und dann protocol<UIViewControllerProtocol, CustomProtocol> verwenden.

%Vor%     
zneak 26.04.2015, 18:38
quelle
3

Dies ist jetzt mit der integrierten Komposition möglich:

var children = [UIViewController & NavigationScrollable]()

    
jwswart 02.11.2017 17:50
quelle