如何解决“不符合协议”的问题

时间:2017-11-08 16:13:31

标签: swift delegates xlpagertabstrip

我正在尝试实施git项目XLPagerTabStrip

根据项目,每个控制器都必须:

  

PagerTabStripDataSource的viewControllers(for :)方法提供的每个视图控制器必须符合InfoProvider

但是以下代码抛出:does not conform to protocol

extension UserProfileSubController: IndicatorInfoProvider {

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

        return IndicatorInfo(title: "UserProfileSubController")
    }
}

enter image description here

enter image description here

enter image description here

如果我想自动修复问题,它会重新实现相同的协议功能,然后抛出无效的重新声明。

enter image description here

如果你的控制器确实符合它,你如何修复does not conform to protocol问题?我错过了什么?非常感谢帮助。

PS:我已经清理了项目,构建文件夹,删除了派生数据,重新启动并执行了pod更新以及重新安装pod。

3 个答案:

答案 0 :(得分:0)

检查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
    }

}

而不是公共 struct 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 :(得分:0)

最后是复制/粘贴/依赖问题。 重新开始并删除pod和依赖项代码并重新安装最终解决了这个问题。

答案 2 :(得分:-1)

我不确定这是否可行,但请尝试以下方法:

  1. 将代码放在不在扩展名中的类中。
  2. 使用此特定广告连播pod 'XLPagerTabStrip', '~> 7.0'