2016-09-15 19 views
12

Ben şu kod Swift 2.2'de yazdım:Swift 3'te UnsafeMutablePointer nasıl kullanılır?

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

XCode ikinci borunun 8 vurguları ve iddia

türü için başlatıcı çağırmak olamaz 'UnsafeMutablePointer < _>' an argüman listesi ile '(UnsafeMutableRawPointer)' türünün '

Bana bunu söyleyen XCode'a teşekkür etsem de, UnsafeMutabl'in nasıl değiştirileceğini anlamıyorum. eRawPointer kabul edilebilir.

Bu kodu Swift 3'e dönüştürmeyi bilen var mı?

+0

Bu problemle de karşılaştım. Henüz bir çözüm buldunuz mu? –

+0

Yinelenmeleri önlemek için, bu benimkiyle çok benzer bir sorum. Birisi benim sorumu seninle birlikte cevaplayabilir. ''UnsafePointer <_>' türünde '' UnsafeMointer <_> 'türünde' 'UnsafeMableRawPointer?' '' –

+0

'un OOper'ın cevabı, nope. Senin durumunda NSMutableData kullanmak zorunda mı? – AppreciateIt

cevap

16

Ben bu gibi basit durumlarda, 3.

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

withUnsafeMutableBytes(_:) genel yöntem olarak ilan edilir Swift içinde Data yerine NSData çalışmak tavsiye, peki eleman tipini belirtmeden kullanabilirsiniz .

+0

lütfen bu https://stackoverflow.com/questions/45181614/cannot-invoke-initializer-for-type-unsafepointer-with-an-argument-list-of-typ adresine bakın –