2016-08-01 17 views
1

Ich möchte wissen, wie ein Objekt in eine Klasse umgewandelt wird, die nur zur Laufzeit bestimmt wird.Umwandlung in eine Klasse, die zur Laufzeit bestimmt wird

Nehmen wir ein Beispiel verwenden:

let xClasses = [ClassA.self, ClassB.self] 
let xClass = xClasses[indexPath.row] 
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! xClass 

Also im Grunde, ich habe eine Reihe von Klassen und möchten von einem von ihnen zum Gießen (in diesem Beispiel ein Objekt von UITableViewCell) zur Laufzeit wählen.

(der obige Code funktioniert nicht) Wie erreiche ich das?

HINWEIS: Ich habe diesen Code als Beispiel verwendet, meine Frage ist nicht nur über UITableViewCell. Danke.

+0

was ist dann die Frage? –

+0

@ ÖzgürErsil wie gesagt: wie kann ich in eine Klasse werfen, die zur Laufzeit festgelegt ist. (wie die Situation im obigen Code) – Erfan

Antwort

1

Ich habe so etwas in meinem Projekt. Ich benutze einen Schalter, um damit umzugehen. Etwas wie folgt aus:

switch xClass { 
case is ClassA: 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ClassACell 
case is ClassB: 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ClassBCell 
} 

Höchstwahrscheinlich werden Sie eine default: auch haben müssen.

Typinformationen, die zur Laufzeit ermittelt werden, heißen Existentials. Sie können mehr Informationen in diesem Blog post lesen. In swift2 müssen Sie das Protokoll verwenden, wenn Sie keinen Switch-Fall wünschen.

+0

Danke. Magerte den Artikel. (wird später ausführlicher lesen) – Erfan

+0

Könnten Sie mir bitte sagen, wie verwende ich Protokoll für Casting in Situation wie oben? (Ich benutze Switch auch als Workaround; aber ich mag es wirklich nicht, da es 4-5 Switch-Cases gibt) – Erfan

Verwandte Themen