协议扩展,不符合协议

时间:2016-06-05 18:49:24

标签: ios swift protocols swift-protocols

我正在创建一个名为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是这些代码的链接。随便看看它。

1 个答案:

答案 0 :(得分:7)

问题是您的extension不公开 - 因此在其定义的模块之外不可见,在本例中为MyFramework

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

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

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

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

    }
}