如何在Swift 3中使用UnsafeMutablePointer?

12

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

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

XCode 8强调了第二行,并声称:

无法使用类型为“UnsafeMutablePointer<_>'的初始化器来调用类型为'(UnsafeMutableRawPointer)'的参数列表

虽然我很感激XCode告诉我这个问题,但我不太明白如何将UnsafeMutableRawPointer更改为可接受的形式。

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


我也遇到了这个问题。你找到解决方案了吗? - JW.ZG
为了避免重复,这是我的问题,与你的非常相似。希望有人能够回答我的问题以及你的问题。无法使用类型“UnsafePointer<_>”的初始化程序调用参数列表类型“(UnsafeMutableRawPointer?)” - JW.ZG
除了OOper的答案,没有其他的。在你的情况下,你必须使用NSMutableData吗? - AppreciateIt
尝试使用这个解决方案。我刚刚用这个解决方案解决了我的问题。 - JW.ZG
1个回答

18

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

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

withUnsafeMutableBytes(_:) 是一个泛型方法,因此在像这样简单的情况下,您可以使用它而不需要指定元素类型。


请查看此链接:https://stackoverflow.com/questions/45181614/cannot-invoke-initializer-for-type-unsafepointer-with-an-argument-list-of-typ - Saurabh Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接