2016-04-28 3 views
9

Ich habe zwei GerüsteUnexpected Verhalten, wenn ein Swift-Protokoll von einem anderen Rahmen (Restofire), die sich

Zuerst - Restofire. Es hat ein Protokoll ResponseSerializer mit Extension.

public protocol ResponseSerializable { 

    /// The type of object returned in response. 
    associatedtype Model 

    /// The `Alamofire.ResponseSerializer`. 
    var responseSerializer: ResponseSerializer<Model, NSError> { get } 

} 

extension ResponseSerializable { 

    /// `CustomJSONResponseSerializer` 
    public var responseSerializer: ResponseSerializer<Model, NSError> { 
     return AlamofireUtils.JSONResponseSerializer() 
    } 

} 

Second - Restofire-Gloss. Es hat eine Erweiterung für ein Protokoll für Decodable-konforme Modelle im Restofire-Framework.

public extension ResponseSerializable where Model: Decodable { 

    /// `GLOSSResponseSerializer` 
    public var responseSerializer: ResponseSerializer<Model, NSError> { 
     return GlossUtils.GLOSSResponseSerializer() 
    } 

} 

public extension ResponseSerializable where Model: CollectionType, Model.Generator.Element: Decodable { 

    /// `GLOSSResponseSerializer` 
    public var responseSerializer: ResponseSerializer<Model, NSError> { 
     return GlossUtils.GLOSSResponseSerializer() 
    } 

} 

Wenn ich die Quelldateien von Restofire-Gloss importieren direkt in das Projekt wie erwartet alles funktioniert, aber wenn ich den Rahmen importieren, dann geht die Steuerung nicht die Funktion im Rahmen Restofire-Gloss erreichen.

+0

Ich denke, das Problem könnte die 'Where-Klausel' sein. Sind Sie sicher, dass Sie nicht die Konformität zu den Protokollen mit einer privaten Erweiterung hinzufügen? Zum Beispiel, wenn es eine private Erweiterung gibt, die 'Model' dazu bringt, mit' Decodable' übereinzustimmen, dann wird die 'Where'-Klausel nicht funktionieren. Versuchen Sie, alle Ihre Erweiterungen öffentlich zu machen. – Sulthan

+0

Alles ist öffentlich –

+0

Verwenden Sie Pods, um das Framework hinzuzufügen, oder fügen Sie das Framework direkt in Ihr Projekt ein? – wj2061

Antwort

3

Vielleicht sollten Sie die Erweiterung als öffentlich markieren?

+0

Funktioniert nicht nach dem Hinzufügen von öffentlichen Modifikatoren. –

+0

Zugriffsmodifizierer wie öffentlich oder privat sind für Protokollerweiterungen nicht zulässig. Diese Erweiterungen verwenden die Zugriffsebene des Protokolls, das sie erweitern. –

Verwandte Themen