如何在 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<_>' 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?