【问题标题】:protocol extension, does not conform to protocol协议扩展,不符合协议
【发布时间】:2016-06-05 18:49:24
【问题描述】:

我正在创建一个名为 MyFramework 的框架,其中包含具有一些默认行为的 LoginProtocol.swift

import UIKit

public protocol LoginProtocol {
    func appBannerImage() -> UIImage?
    func appLogoImage() -> UIImage?
}


extension LoginProtocol {
    func appBannerImage() -> UIImage? {
        return (UIImage(named: "login_new_top")) 
    }

    func appLogoImage() -> UIImage? {
        return (UIImage(named: "appLogo"))

    }
}

接下来,我要添加一个新目标来创建一个名为 MyDemoApp 的演示应用程序,它正在使用 MyFramework

import UIKit
import MyFramework

class LoginViewContainer: UIViewController, LoginProtocol {    
    // I think I am fine with defaults method. But actually getting an error
}

目前,我从编译器收到错误,例如

type 'LoginViewContainer does not conform protocol 'LoginProtocol'

我不确定为什么会收到此消息,因为使用协议扩展,该类不需要符合协议

如果我能就这个问题得到一些建议,那就太好了。谢谢

PS:this 是这些代码的链接。随意看看。

【问题讨论】:

  • 你的扩展不是公开的
  • @originaluser2:很好。感谢您的回答。你节省了我的时间。
  • 从技术上讲不是一个答案;)很乐意提供帮助,请随时删除该问题 - 除非您认为它对其他人有用,在这种情况下我可以写一个实际的回答。重要的是,这个问题在外界看来并非“未解决”。
  • 我现在正在学习 Swift,如果你能写一个实际的答案,这样其他成员(比如我)可以知道发生了什么,那就太好了。

标签: ios swift protocols swift-protocols


【解决方案1】:

问题是你的extension 不是公开的——因此它在它定义的模块之外是不可见的,在这种情况下是MyFramework

这意味着您的视图控制器只知道LoginProtocol 定义(因为这个公开的),而不是默认实现。因此编译器会抱怨协议方法没有被实现。

因此,解决方案是简单地将扩展公开:

public extension LoginProtocol {
    func appBannerImage() -> UIImage? {
        return (UIImage(named: "login_new_top")) 
    }

    func appLogoImage() -> UIImage? {
        return (UIImage(named: "appLogo"))

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多