2016-12-16 1 views
5

URLRequestをSwift 3.0のNSMutableURLRequestに変換しようとしていますが、動作させることができません。これは私が持っているコードです:URLRequestをNSMutableURLRequestに変換する

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

しかし、それは

がNSMutableURLRequestを入力するタイプのURLRequestを変換することはできませんと言います。

「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.requestvarないletを宣言する必要があります。

+0

パーフェクトそれは、変更可能なコピーを取得することは、エラーを投げるが、私は、私はこれを試していたし、それがうまくいかなかったと思っていませんNSURLRequestにキャストようです。私は間違っていたと思う。ありがとうございました! – Minimi

+0

新しい(変更可能な)要求を作成し、元の要求を置き換えることは、所有していない要求に対してプロパティを設定しようとすると機能しません。たとえば、 'webView(_:shouldStartLoadWith:navigationType:)'にあります。そのシナリオに対する提案はありますか? –

0

iOS 10 SDK MutableURLRequestURLRequest構造体タイプ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

ポスターがURLRequestオブジェクトを受け付けないURLProtocol.setProperty(true、forKey: ""、in:要求)を呼び出そうとしました。 –

関連する問題