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

Другие вопросы по тегам