将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)!)