Aufruf der Methode für die Unterklasse zu UITableViewCell mit generischem Parameterwert basierend auf dem Protokoll oder der Basisklasse

9

Ich möchte den Aufruf einer "setup" -Methode in UITableViewCell-Unterklassen vereinfachen. Nicht alle Setup-Methoden sind jedoch identisch, aber ihre Parameter erben vom gleichen Typ. Ist es möglich mit Generics oder Protokoll, den Parameter nicht jedes Mal zu werfen?

Zuerst mache ich eine cellForRow-Methode wie folgt:

%Vor%

wo ich die Zelle mit cellData und viewModel eingerichtet habe.

In meinen (vielen) benutzerdefinierten UITableViewCell-Unterklassen:

%Vor%

wobei HomeViewTableViewCellData Unterklasse von TableViewCellData und ist HomeViewModel ist eine Unterklasse von ViewModel

Stattdessen möchte ich die Wachen entfernen und direkt etwas schreiben:

%Vor%

Versuchte Lösungen (die nicht funktionieren):

Irgendwelche Ideen oder muss ich mit meinen Castings leben?

Bearbeiten 1: Nach den Vorschlägen von Nate Mann habe ich diesen Code ausprobiert (ich habe einige generische Typen umbenannt):

%Vor%

Diese Zeile funktioniert auch: (Beachten Sie die zusätzliche where-Klausel)

%Vor%

Aber Wechsel von

%Vor%

bis

%Vor%

Geben Sie diesen Fehler ein:

%Vor%

Edit 2: Die Verwendung einer konkreten Version einer generischen Basisklasse für eine UITableViewCell-Klasse ist ebenfalls nicht möglich. Siehe Warum kann der Interface Builder nicht verwendet werden? eine konkrete generische Unterklasse von UIView?

    
Sunkas 13.03.2017, 18:00
quelle

3 Antworten

0

Meine eigene Vorstellung von der Antwort ist, dass es im Moment nicht möglich ist.

Nate Manns Antwort verlangt von mir, eine konkrete Implementierung von CellDataSetupable anzugeben, die ich nicht möchte.

timaktimaks Antworten benötigen entweder eine konkrete Implementierung oder erfordern eine Unterklasse einer UIView.

    
Sunkas 16.03.2017, 14:28
quelle
1

Ich denke, das sollte funktionieren:

%Vor%     
Nate Mann 17.03.2017 15:13
quelle
0

Wenn Sie DataSource verwenden, geben Sie konkrete Typen an, mit denen DataSource arbeitet. Also,

%Vor%

sollte wirklich

sein %Vor%

wobei HomeTableViewCell eine konkrete UITableViewCell Unterklasse ist, die mit CellDataSetupable übereinstimmt (wie BlurbTableViewCell oder TransactionTableViewCell ). Es wird dann gut funktionieren.

Hier ist ein einfaches generisches TableViewDataSource-Beispiel, das funktioniert und vielleicht ein wenig einfacher zu verstehen ist.

Generische Typen:

%Vor%

Konkrete Klassen, die auf dem obigen Code basieren:

%Vor%

Edit: Sie Unterklasse kann auch mit verschiedenen Arten von Zellen arbeiten, wenn Sie möchten.

%Vor%

Hoffe, das hilft! Viel Glück!

    
timaktimak 20.03.2017 21:40
quelle

Tags und Links