Swift语言:如何调用SecRandomCopyBytes

Dan*_*iel 7 xcode ios swift xcode6

从Objective-C,我可以这样做:

NSMutableData *data = [NSMutableData dataWithLength:length];
int result = SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes);
Run Code Online (Sandbox Code Playgroud)

在Swift中尝试这个时,我有以下内容:

let data = NSMutableData(length: Int(length))
let result = SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes)
Run Code Online (Sandbox Code Playgroud)

但我得到这个编译器错误:

'Void' is not identical to 'UInt8'
Run Code Online (Sandbox Code Playgroud)

data.mutableBytes参数被拒绝,因为类型不匹配,但我无法弄清楚如何强制参数(我假设它在某种程度上是安全的).

Dan*_*iel 13

这似乎有效:

let data = NSMutableData(length: Int(length))
let result = SecRandomCopyBytes(kSecRandomDefault, length, UnsafeMutablePointer<UInt8>(data.mutableBytes))
Run Code Online (Sandbox Code Playgroud)


Ond*_*cek 9

斯威夫特4:

let count: Int = <byteCount>
var data = Data(count: count)
let result = data.withUnsafeMutableBytes {    
    SecRandomCopyBytes(kSecRandomDefault, count, $0.baseAddress!) 
}
Run Code Online (Sandbox Code Playgroud)