Как исправить "не соответствует протоколу", когда в нем

Я пытаюсь реализовать git-проект XLPagerTabStrip.

Согласно проекту каждый контроллер должен:

Каждый контроллер представления, предоставленный методом viewControllers PagerTabStripDataSource (для метода:), должен соответствовать InfoProvider

Но следующий код бросает: does not conform to protocol

extension UserProfileSubController: IndicatorInfoProvider {

    func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {

        return IndicatorInfo(title: "UserProfileSubController")
    }
}

Если я хочу автоматически решить проблему, он повторно реализует ту же функцию протокола, а затем выбрасывает недопустимое повторное объявление.

Как вы исправите does not conform to protocol вопрос, если ваш контроллер на самом деле соответствует этому? Что мне не хватает? Помощь очень ценится.

PS: Я очистил проект, папку сборки, удалил производные данные, перезапустил и выполнил обновление модуля, а также переустановил модуль.

3 ответа

Решение

В конце концов это была проблема копирования / вставки / зависимости. Запуск и удаление кода модуля и зависимости и повторная установка решили проблему в конце.

Проверьте класс IndicatorInfo следующим образом:

public struct IndicatorInfo {

    public var title: String?
    public var image: UIImage?
    public var highlightedImage: UIImage?

    public init(title: String?) {
        self.title = title
    }

    public init(image: UIImage?, highlightedImage: UIImage? = nil) {
        self.image = image
        self.highlightedImage = highlightedImage
    }

    public init(title: String?, image: UIImage?, highlightedImage: UIImage? = nil) {
        self.title = title
        self.image = image
        self.highlightedImage = highlightedImage
    }

}

вместо публичной структуры IndicatorInfo{} вы использовали открытый протокол IndicatorInfo{}

И я надеюсь, что вы можете использовать только один протокол в одном классе.

extension YourViewController : IndicatorInfoProvider {

    // MARK: - Top Tab Bar Method - IndicatorInfoProvider
    func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
        return IndicatorInfo(title: "titleStringHere", image: UIImage(named: "Your_Image_Name"))
       /*or   return IndicatorInfo(title: "titleStringHere") */
    }
}

Я не уверен, что это сработает, но попробуйте это:

  1. поместите код в класс, а не в расширение.
  2. использовать этот конкретный стручок pod 'XLPagerTabStrip', '~> 7.0'
Другие вопросы по тегам