types不符合协议“URLRequestConvertible”与Alamofire

代码如下:

enum Router: URLRequestConvertible { //Error: Type 'Five100px.Router' does not conform to protocol 'URLRequestConvertible' static let baseURLString = "https://api.500px.com/v1" static let consumerKey = "MY_KEY" case PopularPhotos(Int) case PhotoInfo(Int, ImageSize) case Comments(Int, Int) var URLRequest: NSURLRequest { let (path, parameters) : (String, [String: AnyObject]) = { switch self { case .PopularPhotos(let page): let params = ["consumer_key": Router.consumerKey, "page": "\(page)", "feature": "popular", "rpp": "50", "include_store": "store_download", "include_status": "votes"] return ("/phtos", params) case .PhotoInfo(let photoID, let ImageSize): var params = ["consumer_key": Router.consumerKey, "image_size": "\(ImageSize.rawValue)"] return ("/photos/\(photoID)", params) case .Comments(let photoID, let commentsPage): var params = ["consumer_key": Router.consumerKey, "comments": "1", "comments_page": "\(commentsPage)"] return ("/photos/\(photoID)/comments", params) } }() let URL = NSURL(string: Router.baseURLString) let URLRequest = NSURLRequest(URL: URL!.URLByAppendingPathComponent(path)) let encoding = Alamofire.ParameterEncoding.URL return encoding.encode(URLRequest, parameters: parameters).0 } } 

我导入Alamofire并添加了这个代码,然后出现错误。 我写了这个代码根据raywenderlich教程: http ://www.raywenderlich.com/85080/beginning-alamofire-tutorial,这是写在Swift 1.2,而我使用Swift 2。

你需要在URLRequest属性而不是NSURLRequest返回一个NSMutableURLRequest 。 这将修复错误。


更新

在Swift 3和Alamofire 4中,你需要从新的asURLRequest()方法返回一个URLRequest 。 有关更多详细信息,请参阅我们更详细的自述文件示例 。

@ cnoon的答案适用于版本3,但是如果你使用Alamofire版本4+,你将不得不实现:

func asURLRequest() throws -> URLRequest