UITableView и Diffable Data Source при поддержке iOS 12 и 13
Я реализовал в своем проекте UITableView Diffable Datasource. Он отлично работает в iOS 13. Когда я запускаю это приложение ниже версии iOS 13, я получаю предупреждение, что оно доступно только в iOS 13. поэтому я пытаюсь реализовать UITableView для версии ниже iOS 13.
Код 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'
Я тоже столкнулся с той же проблемой при просмотре коллекции.
1 ответ
Мы можем использовать @available для вычисляемых свойств. Однако,lazy
переменные считаются вычисляемыми свойствами, поэтому для них также можно использовать @available. У этого есть приятное преимущество, заключающееся в удалении шаблона дополнительного сохраненного свойства и принудительных приведений - на самом деле, он не оставляет никаких свидетельств свойства в вашем коде до iOS 10.
Вы можете просто объявить это так:
@available(iOS 13.0, *)
lazy var datasource = UserDataSource()
Вы можете проверить эту суть для получения дополнительной информации https://gist.github.com/YogeshPateliOS/b2b13bfe5f7eef5cd7fa4a894cd35d5a