gpt4 book ai didi

swift - T.Type 和 [T.Type] 之间的不同行为

转载 作者:行者123 更新时间:2023-11-28 11:47:38 26 4
gpt4 key购买 nike

我正在使用泛型函数来改进 tableView 单元格,如下所示;

public func registerNib<T: UITableViewCell>(_:T.Type) {
print("Registering.....")
print(T.self)
let nib = UINib(nibName: String(describing: T.self), bundle: nil)
register(nib, forCellReuseIdentifier: String(describing: T.self))
}

我写了两个函数来注册单元格,一个用于单个单元格,一个用于多个单元格。

//Single Cell Register

func setup<T: UITableViewCell>(cell:T.Type) {
print(cell)
tableView.registerNib(cell)
self.setupParameters(.....)
}

//Multiple Cell Register

func setup<T: UITableViewCell>(cells:[T.Type]) {
for cell in cells {
print(cell)
tableView.registerNib(cell)
}
self.setupParameters(.....)
}

对于单个单元格实现,您可以按如下方式调用 func,它会正确注册 Nib。

self.baseTableView.setup(cell: CompetencyCell.self, rowHeight: 60)

**************
Output:
CompetencyCell
Registering...
CompetencyCell

但是多次执行会出现问题;

self.baseTableView.setup(cells: [CompetencyCell.self, BehaviorCell.self], rowHeight: 60)

**************
Output:
CompetencyCell
BehaviorCell
Registering...
UITableViewCell
UITableViewCell

我真的很想知道是什么原因,或者我错过了什么?它看起来像相同的行为,但是当我想将 T.Type 值传递给 RegisterNib 方法时,它转向 UITableViewCell 并且在某个时间点之后我当然崩溃了,因为它找不到单元格。

你有什么建议吗?多谢。

最佳答案

当调用泛型函数时,泛型类型 T 代表一个单一静态类型。

[T.Type] 是无意义的,因为它声明了一个相同 类型说明符的数组。

T 并不意味着 Any!

关于swift - T.Type 和 [T.Type] 之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314012/

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