AppreciateIt
AppreciateIt

Reputation: 706

How to use UnsafeMutablePointer in Swift 3?

I have the following code written in Swift 2.2:

let keyData = NSMutableData(length: 64)!
SecRandomCopyBytes(kSecRandomDefault, 64, UnsafeMutablePointer<UInt8>(keyData.mutableBytes))

XCode 8 highlights that second line and claims that

Cannot invoke initializer for type 'UnsafeMutablePointer<_>' with an argument list of type '(UnsafeMutableRawPointer)'

While I appreciate XCode telling me this, I don't quite understand how to change the UnsafeMutableRawPointer to be acceptable.

Does anyone know how to convert this code into Swift 3?

Upvotes: 12

Views: 11842

Answers (1)

OOPer
OOPer

Reputation: 47896

I recommend you to work with Data rather than NSData in Swift 3.

var keyData = Data(count: 64)
let result = keyData.withUnsafeMutableBytes {mutableBytes in
    SecRandomCopyBytes(kSecRandomDefault, keyData.count, mutableBytes)
}

withUnsafeMutableBytes(_:) is declared as a generic method, so, in simple cases such as this, you can use it without specifying element type.

Upvotes: 18

Related Questions