Mam klasę sprawdzania poprawności paragonu, która jest przestarzała od czasu wydania Swift 3. Poprawiłem kilka problemów, ale nadal mam wiele ...UnsafePointer <UInt8> inicjator w Swift 3
Oto kod źródłowy GitHub użyłem: https://gist.github.com/baileysh9/4386ea92b047d97c7285#file-parsing_productids-swift i https://gist.github.com/baileysh9/eddcba49d544635b3cf5
pierwszy błąd:
var p = UnsafePointer<UInt8>(data.bytes)
Compiler throws: Nie można wywołać inicjalizatora dla typu UnsafePointer (UInt8) z listą argumentów typu UnsafeRawPointer
Drugi błąd
while (ptr < end)
operatory binarne < nie mogą być stosowane do dwóch UnsafePointer (Uint8) argumentów
Dziękuję bardzo dużo wcześniej:)
EDIT
Dzięki odpowiedzi LinShiwei znalazłem rozwiązanie do deklaracji UnsafePointer. Kompiluje ale jeszcze nie testowane (bo inne błędy uniknąć mnie do przetestowania):
func getProductIdFromReceipt(_ data:Data) -> String?
{
let tempData: NSMutableData = NSMutableData(length: 26)!
data.withUnsafeBytes {
tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes: $0)
}
var p: UnsafePointer? = tempData.bytes.assumingMemoryBound(to: UInt8.self)
Ok dziękuję, to pomogło :)! I Edytuj moje pytanie, aby dodać nowy kod, ponieważ jest nieco bardziej skomplikowany – GrayFox
@GrayFox Na czym polega problem? – LinShiwei
data.bytes.assumingMemoryBound (do: UInt8.self) nie działa, ponieważ "bajty" zgłaszają błąd kompilatora: "musi użyć UnsafeBytes zamiast bajtów". Dodałem cały blok do sekcji EDYCJA;). Teraz to działa, ale mam inne nowe błędy w device.identifierForVendor.getBytes (UnsafeMutablePointer (mutableData !.mutableBytes)), który jest: "Nie można wywołać init typu UnsafeMutablePointer z listą argumentów typu UnsafeMutableRawPointer" ... – GrayFox