2016-12-16 5 views
5

में कनवर्ट करें मैं स्विफ्ट 3.0 में URLRequest को 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.requestvar नहीं let घोषित किया जाना चाहिए।

+0

बिल्कुल सही यह NSURLRequest करने के लिए इसे कास्टिंग लगता है तो परिवर्तनशील प्रतिलिपि प्राप्त करने में त्रुटि फेंक नहीं है लेकिन मैंने सोचा कि मैं इस की कोशिश की थी और यह काम नहीं किया । शायद कि मुझसे गलती हुई थी। धन्यवाद! – Minimi

+0

एक नया (म्यूटेबल) अनुरोध बनाना और मूल अनुरोध को प्रतिस्थापित करना उस अनुरोध पर संपत्ति सेट करने का प्रयास करते समय काम नहीं करेगा, जिसका आपके पास स्वामित्व नहीं है। उदाहरण के लिए, 'वेब व्यू में (_: चाहिएस्टार्ट लोड करें: नेविगेशन टाइप:) '। उस परिदृश्य के लिए कोई सुझाव? –

0

आईओएस 10 एसडीके MutableURLRequest संरचना प्रकार 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 (सत्य, forKey: "", इन: अनुरोध) को कॉल करने का प्रयास कर रहा था, जो URLRequest ऑब्जेक्ट को स्वीकार नहीं करेगा। –

संबंधित मुद्दे