Alamofire:无法使用类型'(方法,NSURL)'

时间:2015-06-20 02:01:52

标签: swift alamofire

我正在玩请求路由器模式,看起来像这样:

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

我得到前面提到的“无法调用'URLRequest',其参数列表类型为'(方法,NSURL)'”

查看URLRequest的方法签名,我看到:

func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest

NSURL符合URLStringConvertible协议,因此一切都应该是好的。但事实并非如此。现在,这是一个奇怪的部分:

如果我将URLRequest剪切并粘贴到与我的枚举相同的文件中,请通过将其命名为URLRequestt来调整其名称(以避免与原始文件冲突),然后使用该函数,然后所有编译器错误都会消失。

我已将Alamofire swift文件复制到我的项目中,因为我的目标是iOS 7,因此这也可能是一个因素。我没有使用嵌入式框架。

所以,我的问题是:为什么这段代码会抛出编译错误,为什么简单地复制/粘贴/重命名URLRequest函数会导致它工作?

1 个答案:

答案 0 :(得分:1)

如果您在项目中使用Alamofire作为框架,则无法查看URLRequest函数,因为它不是public。你可以把它公之于众(我并不是因为要求AFNetworking做些微不足道的事情而疯狂),或者你可以在你的模块中实现这个功能的副本。

然而,我试验过,在我的项目中使用Alamofire源代码,我看到你描述的同样奇怪的行为。但您可以通过在源文件中包含此函数的副本(如您所述)或者完全绕过它来轻松绕过这一点:

let request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = method.rawValue