协议扩展,不符合协议
Posted
技术标签:
【中文标题】协议扩展,不符合协议【英文标题】: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,如果你能写一个实际的答案,这样其他成员(比如我)可以知道发生了什么,那就太好了。 【参考方案1】:问题是你的extension
不是公开的——因此它在它定义的模块之外是不可见的,在这种情况下是MyFramework
。
这意味着您的视图控制器只知道LoginProtocol
定义(因为这个是公开的),而不是默认实现。因此编译器会抱怨协议方法没有被实现。
因此,解决方案是简单地将扩展公开:
public extension LoginProtocol
func appBannerImage() -> UIImage?
return (UIImage(named: "login_new_top"))
func appLogoImage() -> UIImage?
return (UIImage(named: "appLogo"))
【讨论】:
以上是关于协议扩展,不符合协议的主要内容,如果未能解决你的问题,请参考以下文章