gpt4 book ai didi

ios - 具有不同对象的 UITableViewDiffableDataSource

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

我目前在使用 UITableViewDiffableDataSource 时遇到问题.

我想试试这个新功能,所以我在网上看了很多教程,但似乎没有一个能解决我的问题。

在我当前的 viewController 中,我有一个 UITableView ,有 3 个不同的对象(每个对象有不同的类型),但是 UITableViewDiffableDataSource强类型化为一。

喜欢:dataSource = UITableViewDiffableDataSource <SectionType, ItemType>

我所有的部分都是类似

的内容
func numberOfSections(in tableView: UITableView) -> Int {
return 3
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return bigObject.ObjectsOfType1.count
} else if section == 1 {
return bigObject.ObjectsOfType2.count
} else {
return bigObject.ObjectsOfType3.count
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as! CustomTableViewCell
if indexPath.section == 0 {
cell.buildWithFirstObject(obj: bigObject.ObjectsOfType1[indexPath.row])
} else if indexPath.section == 1 {
cell.buildWithFirstObject(obj: bigObject.ObjectsOfType2[indexPath.row])
} else {
cell.buildWithFirstObject(obj: bigObject.ObjecstOfType3[indexPath.row])
}
}

在我的案例中有使用 diffable dataSource 的技巧吗?

感谢任何帮助!感谢您阅读我:)

最佳答案

另一种可能会阻止将 NSObject 转换为您期望的任何内容(这可能容易崩溃),是将不同的对象作为关联值包装在 enum 符合 Hashable。然后,在您的出队回调中,您将获得枚举,并可以解包关联的值。所以像

enum Wrapper: Hashable {
case one(Type1)
case two(Type2)
case three(Type3)
}

dataSource = UITableViewDiffableDataSource <SectionType, Wrapper>(collectionView: collectionView!) { [weak self] (collectionView: UICollectionView, indexPath: IndexPath, wrapper: Wrapper) -> UICollectionViewCell? in
switch wrapper {
case .one(let object):
guard let cell = dequeueReusableCell( ... ) as? YourCellType else { fatalError() }
// configure the cell
cell.prop1 = object.prop1
return cell

case .two(let object2):
guard let cell = dequeueReusableCell( ... ) as? YourCellType2 else { fatalError() }
// configure the cell
cell.prop1 = object2.prop1
return cell

case .three(let object3):
guard let cell = dequeueReusableCell( ... ) as? YourCellType3 else { fatalError() }
// configure the cell
cell.prop1 = object3.prop1
return cell
}
}

您甚至可以通过一次返回来简化它。

关于ios - 具有不同对象的 UITableViewDiffableDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59071993/

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