2016-06-01 8 views
4

Ich baue eine Bibliothek für statische Tabellenansichten und es funktioniert gut, aber ich stieß auf ein Problem mit generischen Schließungen.Swift generische Schließung

Es sieht aus wie das so weit:

orderForm = Form(tableView: orderTable) { f in 
    f.section { s in 
     s.footer("Při platbě nejsou účtovány žádné další poplatky.") 
     s.cell("Selection") 
      .configure { (cell, path) in 
       let c = cell as! ProfileSelectionCell 
       c.titleLabel?.text = "Způsob platby" 
       c.detailLabel?.text = self.paymentType.first 
      } 
     s.cell("Selection") 
      .configure { (cell, path) in 
       let c = cell as! ProfileSelectionCell 
       c.titleLabel?.text = "Balíček" 
       c.detailLabel?.text = "20 kr. za 1000 Kc" 
      }.selected { path in 

      } 
     } 
    } 

Ich will haben die "Zelle" Variable bereits auf geeignete Art werfen, in diesem Fall ProfileSelectionCell. Hier

ist die Quelle für die Zellklasse:

class Cell { 
internal let id: String 
internal var configure: ((cell: UITableViewCell, path: NSIndexPath) -> Void)? 
internal var selected: ((path: NSIndexPath) -> Void)? 

init(id: String) { 
    self.id = id 
} 

func configure(config: ((cell: UITableViewCell, path: NSIndexPath) -> Void)?) -> Self { 
    self.configure = config 
    return self 
} 

func selected(selected: (path: NSIndexPath) -> Void) -> Self { 
    self.selected = selected 
    return self 
}} 

Mein Problem ist, dass, wenn ich die configure Methode generisch zu machen, ist es nicht möglich ist, die Config-Schließung in der Zelle Variablen zu speichern und wenn ich mache die Gesamtzelle generisch, ich kann die Zelle nicht in einem Array in Abschnitt Klasse und so weiter speichern ..

Ist das in irgendeiner Weise lösbar?

+0

Meiner Meinung nach überfordern solche Bibliotheken in den meisten Fällen jeden Code wirklich. Wenn Sie statische Zellen haben, warum erstellen Sie sie nicht in einem Storyboard mit 'UITableViewController'? – Sulthan

+0

Es ist nicht möglich, statische Tabellen in UIViewController zu verwenden, sonst wäre es zumindest einigermaßen brauchbar. Ich kann UITableViewController für die meisten meiner Formulare nicht verwenden. Und einfache Delegierte zu verwenden, ist nur Schmerz. – Silverlaine

+0

Haben Sie an Kindercontroller gedacht? Jeder 'UIViewController' kann' UITableViewController' als Kind Controller haben. – Sulthan

Antwort

1

Sie können die Klasse Cell generisch machen, z.

class Cell<T : UITableViewCell> { 
} 

und verwenden Sie dann T statt jeden UITableViewCell.

Leider müssten Sie auch in den Klassen Section und Form die gleichen Klassen haben. Das würde für Tabellen mit einem Typ von Zellen funktionieren, aber es wird wahrscheinlich nicht für Tabellen mit mehreren Zelltypen funktionieren. In diesem Fall werden Sie immer müssen irgendwo Gießen.

+0

Das ist, was ich hatte Angst vor :( – Silverlaine

Verwandte Themen