Tôi có một lớp xác nhận biên nhận không được chấp nhận vì Swift 3 đã phát hành. Tôi cố định một số vấn đề, nhưng tôi vẫn có nhiều ...UnsafePointer <UInt8> initializer trong Swift 3
Đây là mã nguồn GitHub tôi đã sử dụng: https://gist.github.com/baileysh9/4386ea92b047d97c7285#file-parsing_productids-swift và https://gist.github.com/baileysh9/eddcba49d544635b3cf5
Đầu tiên Lỗi:
var p = UnsafePointer<UInt8>(data.bytes)
Compiler ném: Không thể gọi trình khởi tạo cho loại UnsafePointer (UInt8) với danh sách đối số của loại UnsafeRawPointer
.210lỗi Second
while (ptr < end)
khai thác Binary < không thể được áp dụng cho hai UnsafePointer (uint8) toán hạng
Cảm ơn bạn rất nhiều trước:)
EDIT
Nhờ câu trả lời của LinShiwei tôi đã tìm thấy một giải pháp để khai báo UnsafePointer. Nó biên dịch nhưng chưa được thử nghiệm chưa (vì các lỗi khác tránh tôi để kiểm tra):
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)
Được rồi cảm ơn bạn, điều này đã giúp :)! Tôi chỉnh sửa câu hỏi của mình để thêm mã mới vì nó phức tạp hơn một chút – GrayFox
@GrayFox Sự cố là gì? – LinShiwei
data.bytes.assumingMemoryBound (tới: UInt8.self) không hoạt động vì 'byte' ném lỗi trình biên dịch: "cần sử dụng UnsafeBytes thay vì byte". Tôi đã thêm toàn bộ khối vào phần EDIT;). Bây giờ, điều này làm việc nhưng tôi có lỗi mới khác trong device.identifierForVendor.getBytes (UnsafeMutablePointer (mutableData !.mutableBytes)) là: "Không thể gọi init kiểu UnsafeMutablePointer với danh sách đối số kiểu UnsafeMutableRawPointer" .... – GrayFox