2016-04-28 11 views
9

一個夫特協議時,我有兩個框架意外行爲延伸從另一框架(Restofire)

首先 - Restofire。它有一個擴展協議ResponseSerializer。

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() 
    } 

} 

二 - Restofire光澤。它具有對Restofire框架中符合Decodable的模型的協議的擴展。

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() 
    } 

} 

當我Restofire光澤的源文件直接導入項目一切正常,但是當我輸入的框架,那麼控制沒有達到在Restofire光澤框架的功能。

+0

我認爲問題可能是'where子句'。你確定你沒有使用某些私有擴展來添加協議嗎?例如,如果有一個私有擴展使'Model'符合'Decodable',那麼'where'子句將不起作用。儘量讓你的所有擴展公開。 – Sulthan

+0

一切都是公開的 –

+0

您是否使用pod添加框架,或直接將框架拖放到您的項目中? – wj2061

回答

3

也許你應該把擴展標記爲公開?

+0

添加公共修飾符後無效。 –

+0

協議擴展名不允許訪問修飾符,如public或private。這些擴展使用它們擴展的協議的訪問級別。 –