将URLRequest转换为NSMutableURLRequest

我正在尝试将URLRequest转换为Swift 3.0中的NSMutableURLRequest ,但我无法让它工作。 这是我的代码:

 var request = self.request URLProtocol.setProperty(true, forKey: "", in: request) 

但它说

无法将类型URLRequest转换为类型NSMutableURLRequest。

当我尝试使用’as’进行投射时,它只是说投射将永远失败。 我该怎么办?

其基础是获取可变副本,更新可变副本,然后使用可变副本更新请求。

 let mutableRequest = ((self.request as NSURLRequest).mutableCopy() as? NSMutableURLRequest)! URLProtocol.setProperty(true, forKey: "", in: mutableRequest) self.request = mutableRequest as URLRequest 

最好使用避免强制解包。

 guard let mutableRequest = (self.request as NSURLRequest).mutableCopy() as? NSMutableURLRequest else { // Handle the error return } URLProtocol.setProperty(true, forKey: "", in: mutableRequest) self.request = mutableRequest as URLRequest 

注意: self.request必须声明为var not let

使用Swift 4.1,以下解决方案对我有用

 if let mutableRequest = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest { mutableRequest.addValue("VALUE", forHTTPHeaderField: "KEY") print(mutableRequest) } 

由于不推荐使用iOS 10 SDK MutableURLRequest而支持使用带有var关键字的URLRequest结构类型。 此外, URLRequest 还桥接到NSMutableURLRequest因此您可以安全地进行强制转换:

 let r = URLRequest(url: URL(string: "https://stackoverflow.com")!) as! NSMutableURLRequest URLProtocol.setProperty("Hello, world!", forKey: "test", in: r) print(URLProtocol.property(forKey: "test", in: r as! URLRequest)!)