支持 iOS 12 和 13 时的 UITableView 和 Diffable Data Source

UITableView And Diffable Data Source when supporting iOS 12 and 13

我在我的项目中实现了 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 上也遇到了同样的问题。

我们可以在计算属性上使用@available。但是,lazy 变量被认为是计算属性,因此您也可以对它们使用 @available。这有一个很好的好处,那就是删除额外存储的 属性 和强制转换的样板 - 事实上,它不会在你的 pre-iOS 10 代码中留下 属性 的证据。

您可以像这样简单地声明它:

@available(iOS 13.0, *)
lazy var datasource = UserDataSource()

您可以查看此要点以获取更多信息 https://gist.github.com/YogeshPateliOS/b2b13bfe5f7eef5cd7fa4a894cd35d5a