协议扩展,不符合协议
protocol extension, does not conform to protocol
我正在创建一个名为 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'
我不确定为什么会收到此消息,因为有了协议扩展,class 不需要遵守协议
如果我能得到一些关于这方面的建议就太好了issue.Thanks
PS:this 是这些代码的 link。随便看看。
问题是您的 extension
不是 public – 因此它在定义它的模块之外是不可见的,在本例中是 MyFramework
.
这意味着您的视图控制器只知道 LoginProtocol
定义(因为这个 是 public),但不知道默认实现。因此编译器抱怨协议方法没有被实现。
因此,解决方案是简单地进行扩展 public:
public extension LoginProtocol {
func appBannerImage() -> UIImage? {
return (UIImage(named: "login_new_top"))
}
func appLogoImage() -> UIImage? {
return (UIImage(named: "appLogo"))
}
}
我正在创建一个名为 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'
我不确定为什么会收到此消息,因为有了协议扩展,class 不需要遵守协议
如果我能得到一些关于这方面的建议就太好了issue.Thanks
PS:this 是这些代码的 link。随便看看。
问题是您的 extension
不是 public – 因此它在定义它的模块之外是不可见的,在本例中是 MyFramework
.
这意味着您的视图控制器只知道 LoginProtocol
定义(因为这个 是 public),但不知道默认实现。因此编译器抱怨协议方法没有被实现。
因此,解决方案是简单地进行扩展 public:
public extension LoginProtocol {
func appBannerImage() -> UIImage? {
return (UIImage(named: "login_new_top"))
}
func appLogoImage() -> UIImage? {
return (UIImage(named: "appLogo"))
}
}