协议扩展,不符合协议

ton*_*ran 5 protocols ios swift swift-protocols

我正在创建一个名为contains的框架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"))

    }
}
Run Code Online (Sandbox Code Playgroud)

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

import UIKit
import MyFramework

class LoginViewContainer: UIViewController, LoginProtocol {    
    // I think I am fine with defaults method. But actually getting an error
}
Run Code Online (Sandbox Code Playgroud)

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

type 'LoginViewContainer does not conform protocol 'LoginProtocol'
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我收到此消息,因为通过协议扩展,该类不需要符合协议

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

PS:是这些代码的链接.随便看看它.

Ham*_*ish 7

问题在于您extension不是公开的 - 因此在这种情况下,它在其定义的模块之外是不可见的MyFramework.

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

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

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)