gpt4 book ai didi

快速通用和动态方法调度

转载 作者:行者123 更新时间:2023-11-28 05:41:49 25 4
gpt4 key购买 nike

我为 UITableViewCell 创建了一个扩展,并给出了默认方法。通过set<T: UITableViewCell>方法,我想要 setupData方法可以按单元格类型动态分派(dispatch)。但总是失败,结果跳转到fatalError。


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


最佳答案

扩展中的事物始终是静态调度的。在 set 中,cell.setupData(1) 在编译时已经绑定(bind)到扩展中的实现。

我不明白你为什么需要这个扩展,你只需要:

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

关于快速通用和动态方法调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56413484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com