2016-09-15 12 views
12

Mam następujący kod napisany w Swift 2.2:Jak korzystać z UnsafeMutablePointer w Swift 3?

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

Xcode 8 podkreśla, że ​​drugą linię i twierdzi, że

nie może powoływać się inicjator dla typu 'UnsafeMutablePointer < _>' z listy argumentów typu "(UnsafeMutableRawPointer)"

Doceniam XCode mówiąc mi to, ale nie bardzo rozumiem, jak zmienić UnsafeMutabl eRawPointer jest akceptowalny.

Czy ktoś wie, jak przekonwertować ten kod na Swift 3?

+0

Ten problem został rozwiązany. Czy znalazłeś jakieś rozwiązanie? –

+0

Aby uniknąć duplikatów, to jest moje pytanie, bardzo podobne do twojego. Mam nadzieję, że ktoś może odpowiedzieć na moje pytanie razem z twoim. "Nie można wywołać inicjalizatora dla typu" UnsafePointer <_> "z listą argumentów typu" (UnsafeMutableRawPointer?) "' –

+0

Inne niż odpowiedź OOper, nie. Czy w twoim przypadku musisz użyć NSMutableData? – AppreciateIt

Odpowiedz

16

polecam do pracy z Data zamiast NSData w Swift 3.

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

withUnsafeMutableBytes(_:) jest zadeklarowana jako metoda rodzajowa, więc w prostych przypadkach takich jak ten, można go używać bez określenia typu elementu .

+0

zobacz https://stackoverflow.com/questions/45181614/cannot-invoke-initializer-for-type-unsafepointer-with-an-argument-list-of-typu –

Powiązane problemy