Синтаксис протокола Swift, где Self: это UICollectionViewDataSource и UICollectionViewDelegate - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь создать протокол, который автоматически добавит UICollectionView к любому UIViewController, который соответствует.

Вот мой текущий код:

protocol ReusableNavigation {
    var actionContainer: UIView! { get }
    func addActionMenuCollection()
}

extension ReusableNavigation where Self: UICollectionViewDataSource {
    func addActionMenuCollection() {
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()

        layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
        layout.itemSize = CGSize(width: 60, height: 60)
        let actionMenu:UICollectionView = UICollectionView(frame: self.actionContainer.frame, collectionViewLayout: layout)

        actionMenu.dataSource = self
        actionMenu.delegate = self
        actionMenu.register(UINib(nibName: "ActionCell", bundle: nil), forCellWithReuseIdentifier: "actionCell")
        actionMenu.semanticContentAttribute = UISemanticContentAttribute.forceRightToLeft
        self.actionContainer.addSubview(actionMenu)
    }
}

Очевидно, вышеприведенные ошибки кода когда я пытаюсь установить делегат actionMenu, поскольку self является ТОЛЬКО UICollectionViewDataSource

, я не могу на всю жизнь выяснить синтаксис расширения протокола, где self будет равно ОБА UICollectionViewDataSource и UICollectionViewDelegate.

Возможно ли это? Мысли?

1 Ответ

1 голос
/ 25 января 2020

Добавить ограничения через запятую

extension ReusableNavigation where Self: UICollectionViewDataSource,  Self: UICollectionViewDelegate { ...

или амперсанд конкатенированный

extension ReusableNavigation where Self: UICollectionViewDataSource & UICollectionViewDelegate
...