无法将“NSMutableURLRequest”(0x11beb7040)类型的值转换为“Alamofire.URLRequestConvertible”(0x11beb9040)

Posted

技术标签:

【中文标题】无法将“NSMutableURLRequest”(0x11beb7040)类型的值转换为“Alamofire.URLRequestConvertible”(0x11beb9040)【英文标题】:Could not cast value of type 'NSMutableURLRequest' (0x11beb7040) to 'Alamofire.URLRequestConvertible' (0x11beb9040) 【发布时间】:2016-12-13 06:12:09 【问题描述】:

当构建我的代码然后在Alamofire.request(request as! URLRequestConvertible).responseJSON() 上崩溃。请建议如何解决此崩溃

let url = NSURL(string: "https://jsonplaceholder.typicode.com/users")
let request = NSMutableURLRequest(url:url! as URL)
request.httpMethod = "GET"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

Alamofire.request(request as! URLRequestConvertible).responseJSON() response in

       switch response.result
       
          case .success(let data):                
             print(" i got my Data Yup",data)          
          case .failure(let error):
             print(error)                                
        
    

【问题讨论】:

可能是这会造成 Alamofire.request(request as! URLRequestConvertible).responseJSON() 问题。 同样在第二行你使用 let request = NSMutableURLRequest(url:url! as URL) 但在第五行你把 request 当作! URLRequestConvertible 。为什么?我觉得没必要。不带敞篷车试试。 【参考方案1】:

在 Swift 3 中,您只需将 NSMutableURLRequest 更改为 URLRequest 即可。不需要投。 此外,设置 var 使其可以快速可变。 :) 谢谢马库斯的评论。

【讨论】:

谢谢,这行得通。另外不要忘记设置 var 而不是 let 使其可变。【参考方案2】:

let request = NSMutableURLRequest(url:url! as URL) 更改为 var request = URLRequest(url: NSURL(string: url)! as URL) 您的代码如下所示:-

    let url = NSURL(string: "https://jsonplaceholder.typicode.com/users")
    var request = URLRequest(url: NSURL(string: url)! as URL)
    request.httpMethod = "GET"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

    Alamofire.request(request as! URLRequestConvertible).responseJSON() response in

           switch response.result
           
              case .success(let data):                
                 print(" i got my Data Yup",data)          
              case .failure(let error):
                 print(error)                                
            
        

【讨论】:

您想通过一些解释来扩充您的纯代码答案吗?【参考方案3】:

您也可以尝试使用以下请求方法的语法:

Alamofire.request(strURL,method: .post, parameters: parameters as? [String : AnyObject], encoding: URLEncoding.default)

【讨论】:

以上是关于无法将“NSMutableURLRequest”(0x11beb7040)类型的值转换为“Alamofire.URLRequestConvertible”(0x11beb9040)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用类型为“(NSMutableURLRequest,(_,_,_) throws -> _)”的参数列表调用“dataTaskWithRequest”

NSMutableURLRequest 发送部分帖子正文

POST 请求未考虑 NSMutableURLRequest 超时间隔

NSMutableURLRequest 处理soap请求中的特殊字符

NSMutableURLRequest 在大约 15 秒后超时。超时设置为 240 秒

如何使用 NSMutableURLRequest 请求查找上传到服务器的图像百分比