Доступный переключатель класса Swift в зависимости от версии iOS для UICollectionViewCell и UICollectionViewListCell

Для iOS13 мой класс ячеек — UICollectionViewCell, а в iOS14 я хочу, чтобы тот же класс был UICollectionViewListCell, который доступен только в iOS14 для макета списка, который я использую в iOS14.

Есть ли способ достичь этого?

Примечание: это простой случай, но у меня много ячеек, поэтому иметь 2 разных класса для каждой iOS не вариант.

      @available(iOS 13, *)
class MyCell: UICollectionViewCell {
    
}

@available(iOS 14, *)
class MyCell: UICollectionViewListCell {
    
}

1 ответ

То, что вы хотите сделать, это условно скомпилировать одно или другое, поэтому вам нужно что-то, что имеет эту форму:

      #if os(iOS)
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
        @available(iOS 14, *)
        class MyCell: UICollectionViewListCell { }
    #else
        @available(iOS 13, *)
        class MyCell: UICollectionViewCell { }
    #endif
#else
// Maybe cases here for macOS, tvOS, watchOS
#endif
Другие вопросы по тегам