如何在 Swift 3 中使用 UnsafeMutablePointer?

Posted

技术标签:

【中文标题】如何在 Swift 3 中使用 UnsafeMutablePointer?【英文标题】:How to use UnsafeMutablePointer in Swift 3? 【发布时间】:2016-09-15 15:40:01 【问题描述】:

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

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

XCode 8 突出显示第二行并声称

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

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

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

【问题讨论】:

我也遇到了这个问题。你找到解决办法了吗? 为了避免重复,这是我的问题,和你的很相似。希望有人能和你一起回答我的问题。 Cannot invoke initializer for type 'UnsafePointer&lt;_&gt;' with an argument list of type '(UnsafeMutableRawPointer?)' 除了 OOper 的回答,不。在你的情况下你必须使用 NSMutableData 吗? 试试这个solution。我刚刚用这个解决方案解决了我的问题。 【参考方案1】:

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

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

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

【讨论】:

请看这个***.com/questions/45181614/…

以上是关于如何在 Swift 3 中使用 UnsafeMutablePointer?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中使用 NSLocale 获取国家代码

如何在 Swift 3 中使用 UnsafeMutablePointer?

如何在 Swift 3.0 中使用 keysSortedByValue?

如何使用 Swift 3 在 UIView 中覆盖 requiresConstraintBasedLayout?

如何在 swift 3 中使用现有的 SQLite? (FMDB)

我如何在 XCODE 8、Swift 3 中使用 UIAutomation