协议扩展,不符合协议
我正在创建一个名为MyFramework
的框架, 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: 这是这些代码的链接。 随便看看它。
问题是您的extension
程序不公开 – 因此它在其定义的模块外部不可见,在本例中为MyFramework
。
这意味着您的视图控制器只知道LoginProtocol
定义(因为这是公共的),而不是默认实现。 因此编译器抱怨没有实现协议方法。
因此,解决方案是简单地将扩展公开:
public extension LoginProtocol { func appBannerImage() -> UIImage? { return (UIImage(named: "login_new_top")) } func appLogoImage() -> UIImage? { return (UIImage(named: "appLogo")) } }