快速的通用和动态方法分派

时间:2019-06-02 08:39:40

标签: swift generics dynamic

我为UITableViewCell创建一个扩展,并提供默认方法。 通过set<T: UITableViewCell>方法,我希望setupData方法可以按单元格类型动态分配。但是它总是失败,结果跳到致命错误。


import UIKit

class cell: UITableViewCell {
    func setupData<T>(_ data: T) {
        print(#function)
    }
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        set(cell.self)
    }

    func set<T: UITableViewCell>(_ t: T.Type) {
        let cell = T()
        cell.setupData(1)
    }
}

protocol Action {
    func setupData<T>(_ data: T)
}

extension Action {
    func setupData<T>(_ data: T) {
        fatalError("This method is abstract, need subclass.")
    }
}

extension UITableViewCell: Action {}


1 个答案:

答案 0 :(得分:1)

扩展中的内容始终静态分配。在set中,cell.setupData(1)已在编译时绑定到扩展中的实现。

我不明白为什么您仍然需要此扩展,您只需要:

class cell: UITableViewCell, Action {
    func setupData<T>(_ data: T) {
        print(#function)
    }
}

protocol Action {
    func setupData<T>(_ data: T)
    init()
}

...

func set<T: Action>(_ t: T.Type) {
    let cell = T()
    cell.setupData(1)
}