ios – Swiftのジェネリッククロージャー

静的テーブルビュー用のライブラリを構築していますが、問題なく動作しますが、一般的なクロージャで問題が発生しました。

これまでのところ、このように見えます。

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

            }
        }
    }

“cell”変数がすでに適切な型、この場合はProfileSelectionCellにキャストされるようにします。

これがセルクラスのソースです。

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
}}

私の問題は、configureメソッドをジェネリックにするとconfigクロージャーをセル変数に格納することができず、セル全体をジェネリックにするとSectionクラスの配列にセルを保存できないことなどです。 ..

これは何らかの方法で解決可能ですか?

ベストアンサー
Cellクラスを一般的なものにすることができます。

class Cell<T : UITableViewCell> {
}

そして、すべてのUITableViewCellの代わりにTを使用します。

残念ながら、SectionクラスとFormクラスの両方で同じことが必要です。これは1種類のセルを持つテーブルでは機能しますが、複数のセルタイプを持つテーブルではおそらく機能しません。その場合は常にどこかにキャストする必要があります。

転載記事の出典を記入してください: ios – Swiftのジェネリッククロージャー - コードログ