Alamofire:无法调用非函数类型“NSHTTPURLResponse”的值?
Posted
技术标签:
【中文标题】Alamofire:无法调用非函数类型“NSHTTPURLResponse”的值?【英文标题】:Alamofire: Cannot call value of non-function type 'NSHTTPURLResponse?' 【发布时间】:2016-10-03 11:37:00 【问题描述】:我在一个名为 APIManager 的类上有一个扩展:
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
)
当扩展包含在 SAME FILE 中的 APIManager 类下时,没有任何问题。
但是,当我将扩展名移到新文件中时,我收到以下错误:
不能调用非函数类型'NSHTTPURLResponse?'的值
很明显,当扩展名放在另一个文件中时,编译器会将上面定义的 Alamofire/ResponseSerialization.swift 方法与 Alamofire Request 类的 Alamofire/Request.swift 中的 'response' 属性混淆
APIManager 类如下:
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 类默认是内部的。) 打开类右侧的文档检查器窗格,确保您的目标成员资格包括您正在编译的目标。如果您的问题仍然存在,请告诉我,我会进一步调查。
【讨论】:
谢谢@Jacob - 我已经验证这两个条件都成立,但问题仍然存在。 我还包含了原来的 APIManager 类。 尽管 APIManager 被标记为公共,但其中的一些结构被标记为私有。这就是问题所在。 啊,有道理。很高兴您找到了解决方案。以上是关于Alamofire:无法调用非函数类型“NSHTTPURLResponse”的值?的主要内容,如果未能解决你的问题,请参考以下文章
无法调用非函数类型“((UInt)->数据?)!”的值与 Alamofire 4
无法调用非函数类型“HTTPURLResponse?”的值- 阿拉莫菲尔 4.0