2016-10-03 48 views
0

我有一類叫做APIManager擴展:Alamofire:無法調用非函數類型'NSHTTPURLResponse'的值

import Alamofire 
import Foundation 

// MARK: - Logout 
extension APIManager { 

    public func performLogout() { 
     let request = defaultManager.request(APIManager.Router.Logout.URLRequest) 

     request.response(// ERROR ON THIS LINE AS NOTED BELOW 
      queue: APIManager.responseQueue, 
      responseSerializer: Request.stringResponseSerializer(), 
      completionHandler: { [weak self] (response) in 
       guard let strongSelf = self else { return } 

      } 
     ) 
    } 

} 

當分機包括在同一個文件的APIManager類的下面,有沒有任何問題。

然而,當我拿擴展,並將其移動到一個新的文件,我收到此錯誤:

Cannot call value of non-function type 'NSHTTPURLResponse?'

很明顯,分機時,放置在另一個文件中,編譯器混淆上述方法與在Alamofire Request類

的APIManager類的Alamofire/Request.swift的 '響應' 屬性定義Alamofire/ResponseSerialization.swift低於:

public final class APIManager { 

    // MARK: - Singleton shared instance 
    static let sharedInstance = APIManager() 

    let defaultManager: Alamofire.Manager = { 
    let serverTrustPolicies: [String: ServerTrustPolicy] = [ 

     "TBD1": .PinCertificates(
      certificates: ServerTrustPolicy.certificatesInBundle(), 
      validateCertificateChain: true, 
      validateHost: true 
     ), 

     "TBD2": .DisableEvaluation 
    ] 

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders 

    return Alamofire.Manager(
     configuration: configuration, 
     serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) 
    ) 
    }() 
} 

這裏有一個類似的問題,但它並不完全一樣:

Cannot call value of non-function type 'NSHTTPURLResponse?' Alamofire ObjectMapper

回答

1

如果是這樣,正如你所說,在其他文件做工精細一些建議浮現在腦海中。

  • 將您正在擴展的類標記爲公共。 (默認情況下,Swift類是內部的。)
  • 打開班級右側的文檔檢查器窗格,確保您的目標成員資格包含您正在編譯的目標。

讓我知道如果你的問題仍然存在,我會進一步調查。

+0

謝謝@Jacob - 我已經驗證了兩種情況都是如此,但問題依然存在。 – etayluz

+0

我還包含了原始的APIManager類。 – etayluz

+0

即使APIManager被標記爲公開,其中的一些結構被標記爲私有。這是問題。 – etayluz

相關問題