Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'bytes' is unavailable: use withUnsafeBytes instead

Tags:

ios

swift

nsdata

Code that was previously working in Swift 2.2 is now throwing the following error in Swift 3:

enter image description here

Here is my code:

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

What should I replace "data.bytes" with to fix the error? I've tried implementing 'withUnsafeBytes' and had a look at Apple's documentation, but can't get my head around it!

like image 597
James Anderson Avatar asked Aug 16 '16 16:08

James Anderson


1 Answers

Assuming that data has type Data, the following should work:

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

using the

/// 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

method of Data. Inside the closure $0 is a UnsafePointer<Void> to the bytes (UnsafeRawPointer in Xcode 8 beta 6).

like image 56
Martin R Avatar answered Oct 22 '22 01:10

Martin R