2016-08-16 7 views
8

कोड है कि पहले स्विफ्ट 2.2 में काम कर रहा था अब स्विफ्ट 3 में निम्न त्रुटि फेंक है:'बाइट' अनुपलब्ध है: उपयोग withUnsafeBytes बजाय

let tempData: NSMutableData = NSMutableData(length: 26)! 
tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes:data.bytes) 
:

enter image description here

यहाँ मेरी कोड है

त्रुटि को ठीक करने के लिए मुझे "data.bytes" को क्या बदलना चाहिए? मैंने'UnsafeBytes 'को लागू करने का प्रयास किया है और ऐप्पल के दस्तावेज़ों पर एक नज़र डाली है, लेकिन मेरे सिर को इसके चारों ओर नहीं मिल सकता है!

+0

आपने 'डेटा' का स्रोत प्रदान नहीं किया है, लेकिन यदि आप इसे 'डेटा' में भी परिवर्तित कर सकते हैं, तो यह सब बहुत आसान होगा और आपको' NSMutableData' और 'Data' के बीच पुल करने की आवश्यकता नहीं होगी। आप बस 'replaceSubrange'' का उपयोग करेंगे। –

उत्तर

9

मान लिया जाये कि data टाइप Data है, निम्नलिखित काम करना चाहिए:

let tempData: NSMutableData = NSMutableData(length: 26)! 
data.withUnsafeBytes { 
    tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes: $0) 
} 

Data की

/// Access the bytes in the data. 
/// 
/// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure. 
public func withUnsafeBytes<ResultType, ContentType>(_ body: @noescape (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType 

पद्धति का उपयोग करके। बंद $0 के अंदर UnsafePointer<Void> बाइट्स (UnsafeRawPointer एक्सकोड 8 बीटा 6 में) के अंदर है।

+0

क्या आप स्विफ्ट 3.0 –

+0

@TejasArdeshna के लिए उत्तर अपडेट कर सकते हैं: वह * है * स्विफ्ट 3. –

+0

लंबाई 26 के रूप में हार्डकोड क्यों की जाती है? क्या यह बड़े डेटा के लिए कोई समस्या पैदा करेगा? मैं आईओएस के लिए नया हूँ, बस पुष्टि कर रहा हूँ। –

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