如何在Swift 3中使用UnsafeMutablePointer?

时间:2016-09-15 15:40:02

标签: ios swift xcode

我有以下用Swift 2.2编写的代码:

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

XCode 8强调第二行并声称

  

无法为类型'UnsafeMutablePointer&lt; _&gt;'调用初始值设定项与   类型'(UnsafeMutableRawPointer)'

的参数列表

虽然我很欣赏XCode告诉我这一点,但我不太明白如何将UnsafeMutableRawPointer更改为可接受。

有谁知道如何将此代码转换为Swift 3?

1 个答案:

答案 0 :(得分:18)

我建议您在Swift 3中使用Data而不是NSData

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

withUnsafeMutableBytes(_:)被声明为泛型方法,因此,在这种情况下,您可以在不指定元素类型的情况下使用它。