2016-10-03 42 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

相关问题