Alamofire:无法使用“(方法,NSURL)”类型的参数列表调用 'URLRequest'
Alamofire: Cannot invoke 'URLRequest' with an argument list of type '(Method, NSURL)'
我正在玩请求路由器模式,看起来像这样:
enum Router: URLRequestConvertible {
static let baseURLString = "https://somewhere"
case DoSomething
var URLRequest: NSURLRequest {
let (method: Method, path: String, parameters: [String: AnyObject]) = {
switch self {
case .DoSomething:
var params = [String: AnyObject]()
return (.GET, "/doSomething", params)
}
}()
let URL = NSURL(string: Router.baseURLString)!.URLByAppendingPathComponent(path)
let request = URLRequest(method, URL) // <- ERROR HERE
let encoding = ParameterEncoding.URL
return encoding.encode(request, parameters: parameters).0
}
}
我得到了前面提到的 "Cannot invoke 'URLRequest' with an argument list of type '(Method, NSURL)'"
查看 URLRequest 的方法签名,我看到:
func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest
NSURL
符合 URLStringConvertible
协议,所以应该没问题。但事实并非如此。现在,这是奇怪的部分:
如果我将 URLRequest 剪切并粘贴到与我的枚举相同的文件中,通过将其命名为 URLRequestt 来调整其名称(以避免与原始文件冲突),并改为使用该函数,那么所有编译器错误都会消失。
我已将 Alamofire swift 文件复制到我的项目中,因为我的目标是 iOS 7,因此这也可能是一个因素。我没有使用嵌入式框架。
所以,我的问题是:为什么这段代码会抛出编译器错误,为什么 copy/pasting/renaming URLRequest 函数会导致它工作?
如果您在项目中使用 Alamofire 作为框架,您将看不到 URLRequest
函数,因为它不是 public
。您可以将其设为 public(我并不热衷于将 AFNetworking 用于一些微不足道的事情),或者您可以在您的模块中实现此功能的副本。
不过,我在我的项目中直接使用 Alamofire 源进行了实验,我看到了与您描述的相同的奇怪行为。但是你可以很容易地绕过这个,或者通过在你的源文件中包含这个函数的副本(如你所描述的)或者完全绕过它:
let request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = method.rawValue
我正在玩请求路由器模式,看起来像这样:
enum Router: URLRequestConvertible {
static let baseURLString = "https://somewhere"
case DoSomething
var URLRequest: NSURLRequest {
let (method: Method, path: String, parameters: [String: AnyObject]) = {
switch self {
case .DoSomething:
var params = [String: AnyObject]()
return (.GET, "/doSomething", params)
}
}()
let URL = NSURL(string: Router.baseURLString)!.URLByAppendingPathComponent(path)
let request = URLRequest(method, URL) // <- ERROR HERE
let encoding = ParameterEncoding.URL
return encoding.encode(request, parameters: parameters).0
}
}
我得到了前面提到的 "Cannot invoke 'URLRequest' with an argument list of type '(Method, NSURL)'"
查看 URLRequest 的方法签名,我看到:
func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest
NSURL
符合 URLStringConvertible
协议,所以应该没问题。但事实并非如此。现在,这是奇怪的部分:
如果我将 URLRequest 剪切并粘贴到与我的枚举相同的文件中,通过将其命名为 URLRequestt 来调整其名称(以避免与原始文件冲突),并改为使用该函数,那么所有编译器错误都会消失。
我已将 Alamofire swift 文件复制到我的项目中,因为我的目标是 iOS 7,因此这也可能是一个因素。我没有使用嵌入式框架。
所以,我的问题是:为什么这段代码会抛出编译器错误,为什么 copy/pasting/renaming URLRequest 函数会导致它工作?
如果您在项目中使用 Alamofire 作为框架,您将看不到 URLRequest
函数,因为它不是 public
。您可以将其设为 public(我并不热衷于将 AFNetworking 用于一些微不足道的事情),或者您可以在您的模块中实现此功能的副本。
不过,我在我的项目中直接使用 Alamofire 源进行了实验,我看到了与您描述的相同的奇怪行为。但是你可以很容易地绕过这个,或者通过在你的源文件中包含这个函数的副本(如你所描述的)或者完全绕过它:
let request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = method.rawValue