2016-09-15 37 views
12

我已经写以下代码中夫特2.2:如何在Swift 3中使用UnsafeMutablePointer?

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

的XCode 8个亮点该第二线路和声称

不能调用用于类型初始化“UnsafeMutablePointer < _>”与 参数列表类型'(UnsafeMutableRawPointer)'

虽然我很欣赏XCode告诉我这一点,但我不太了解如何更改UnsafeMutabl eRawPointer是可以接受的。

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

+0

我也遇到过这个问题。你有没有找到任何解决方案? –

+0

为避免重复,这是我的问题,与您的问题非常相似。希望有人能和你一起回答我的问题。 '不能调用类型为'UnsafePointer <_>'的初始值设定项'类型为'(UnsafeMutableRawPointer?)'的参数列表'' –

+0

除OOper的答案外,不是。你需要在你的情况下使用NSMutableData吗? – AppreciateIt

回答

16

我建议你用Data而非NSData在斯威夫特工作3

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

withUnsafeMutableBytes(_:)被声明为一个通用的方法,因此,在简单的这样的情况下,你可以使用它没有指定元素类型。

+0

请看这个https://stackoverflow.com/questions/45181614/cannot-invoke-initializer-for-type-unsafepointer-with-an-argument-list-of-typ –

相关问题