2016-12-16 18 views
5

我試圖將URLRequest轉換爲Swift 3.0中的NSMutableURLRequest,但我無法讓它正常工作。這是我的代碼:將URLRequest轉換爲NSMutableURLRequest

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

但它說

不能轉換類型的URLRequest鍵入NSMutableURLRequest。

當我嘗試使用'as'進行投射時,它只是表示演員陣容總是失敗。我該怎麼辦?

回答

3

這個的基本知識是獲得一個可變副本,更新可變副本,然後用可變副本更新請求。

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必須聲明varlet

+0

完美似乎它鑄造的NSURLRequest然後讓易變的副本不拋出一個錯誤,但我想我已經嘗試了這一點,並沒有奏效。我想我錯了。謝謝! – Minimi

+0

嘗試在不屬於您的請求上設置屬性時,創建新(可變)請求並替換原始請求將不起作用。例如,在'webView(_:shouldStartLoadWith:navigationType:)'中。有關該場景的任何建議? –

0

由於iOS 10 SDK MutableURLRequest已被棄用,傾向於使用URLRequest結構類型與var關鍵字。此外URLRequestis bridgedNSMutableURLRequest,所以你可以放心地強制類型轉換:

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)!) 
+0

海報試圖調用URLProtocol.setProperty(true,forKey:「」,in:request),它不接受URLRequest對象。 –

相關問題