我为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 {}
答案 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)
}