2016-06-05 6 views
5

ich einen Rahmen erschaffe namens MyFrameworkLoginProtocol.swift enthält, die einige StandardverhaltenProtokollerweiterung, entspricht nicht Protokoll

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")) 

    } 
} 

Weiter hat, bin ich ein neues Ziel das Hinzufügen einer Demo-Anwendung zu erstellen MyDemoApp benannt, die unter Verwendung von MyFramework:

import UIKit 
import MyFramework 

class LoginViewContainer: UIViewController, LoginProtocol {  
    // I think I am fine with defaults method. But actually getting an error 
} 

Derzeit erhalte ich vom Compiler einen Fehler wie

Ich bin nicht sicher, warum ich diese Meldung bin immer da mit Protokoll-Erweiterung, wird die Klasse nicht die Protokolle entsprechen müssen

Es wäre toll, wenn ich dies einige Ratschläge über issue.Thanks bekommen

PS: this ist ein Link für diese Codes. Fühlen Sie sich frei, es anzuschauen.

+3

Ihre Erweiterung nicht öffentlich ist – Hamish

+0

@ originaluser2: guter Fang. schätze deine Antwort. Sie sparen mir Stunden. – tonytran

+0

Nicht technisch eine Antwort;) Glücklich zu helfen, fühlen Sie sich frei, die Frage jetzt zu löschen - es sei denn Sie denken, dass es für andere nützlich wäre, in dem Fall * kann * ich eine tatsächliche Antwort schreiben. Wichtig ist, dass diese Frage für die Außenwelt nicht "ungelöst" erscheint. – Hamish

Antwort

6

Das Problem ist, dass Ihre extension nicht öffentlich ist - daher ist es nicht sichtbar außerhalb des Moduls, in dem es definiert ist, in diesem Fall MyFramework.

Dies bedeutet, dass Ihr View-Controller nur über die LoginProtocol Definition weiß (wie diese ist öffentlich), aber nicht die Standardimplementierung. Daher beschwert sich der Compiler über die Protokollmethoden, die nicht implementiert werden.

Die Lösung ist daher einfach die Erweiterung öffentlich zu machen:

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

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

    } 
} 
Verwandte Themen