支持 iOS 12 和 13 时的 UITableView 和 Diffable 数据源
Posted
技术标签:
【中文标题】支持 iOS 12 和 13 时的 UITableView 和 Diffable 数据源【英文标题】:UITableView And Diffable Data Source when supporting iOS 12 and 13 【发布时间】:2020-05-22 06:14:16 【问题描述】:我已经在我的项目中实现了 UITableView Diffable Datasource。它在 ios 13 中运行良好。 当我在 iOS 13 版本以下运行此应用程序时,它会警告我它仅在 ios 13 上可用。所以我正在尝试为低于 iOS 13 的版本实现 UITableView。
UITableView 代码已完成,但我在 iOS 13 上遇到了这个问题。
@available(iOS 13.0, *)
typealias UserDataSource = UITableViewDiffableDataSource<TblSection, YoutubeVideoModel>
@available(iOS 13.0, *)
typealias UserSnapshot = NSDiffableDataSourceSnapshot<TblSection, YoutubeVideoModel>
这里,我声明数据源变量
class SearchViewController: UIViewController
@available(iOS 13.0, *)
var datasource: UserDataSource! //Stored properties cannot be marked potentially unavailable with '@available'
初始化数据源和快照
@available(iOS 13.0, *)
func configureDatasource()
datasource = UITableViewDiffableDataSource<TblSection, YoutubeVideoModel>(tableView: searchTblView, cellProvider: (tableView, indexPath, modelVideo) -> VideoTableViewCell? in
self.configurationCell(indexPath: indexPath)
)
@available(iOS 13.0, *)
func createSnapshot(users: [YoutubeVideoModel])
var snapshot = UserSnapshot()
snapshot.appendSections([.first])
snapshot.appendItems(users)
datasource.apply(snapshot, animatingDifferences: true)
我在声明数据源时遇到此错误,请帮助谢谢。
//Stored properties cannot be marked potentially unavailable with '@available'
我在 collectionview 上也面临同样的问题。
【问题讨论】:
你是怎么解决上述问题的?? 我还没有解决这个问题。如果你发现了什么,请告诉我。 @SSS 我得到了解决方案。请检查我的答案。 【参考方案1】:我们可以在计算属性上使用@available。但是,lazy
变量被视为计算属性,因此您也可以在它们上使用 @available。这具有删除额外存储属性的样板和强制转换的好处 - 事实上,它不会在 iOS 10 之前的代码中留下任何属性的证据。
你可以像这样简单地声明它:
@available(iOS 13.0, *)
lazy var datasource = UserDataSource()
您可以查看此要点以获取更多信息 https://gist.github.com/YogeshPateliOS/b2b13bfe5f7eef5cd7fa4a894cd35d5a
【讨论】:
我想到的另一种方法是将其声明为 Any 类型以避免存储属性错误,然后在配置 dataSource 时为其分配 Diffable Data Source;但它需要在某些地方从 Any 转换为 DataSource。让它变得懒惰绝对是一种更清洁的方法以上是关于支持 iOS 12 和 13 时的 UITableView 和 Diffable 数据源的主要内容,如果未能解决你的问题,请参考以下文章
iOS 13.6 / 12.4.8 正式版来了,依然支持越狱
使用 IOS9 时,无法在 UITable 的部分标题上的 UIButtons 上触发触摸事件(IOS10 很好)
使用 CocoaPods 时的 Xcode 12 部署目标警告
UITableView没有窗口iOS13时的UITableViewAlertForLayoutOutsideViewHierarchy