cuốn sách gpt4 ai đã làm

Không thể chuyển đổi giá trị của loại 'NSRange' (còn gọi là 'NSRange') thành loại đối số dự kiến ​​'Phạm vi''(còn gọi là 'Phạm vi')

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 00:51:16 27 4
mua khóa gpt4 Nike

Tôi đang cố triển khai Easy Game Center liên kếtNhưng tôi gặp lỗi này:

Không thể chuyển đổi giá trị của loại 'NSRange' (còn gọi là 'NSRange') thành loại đối số dự kiến ​​'Range' (còn gọi là 'Range')

Mã này như sau:

 chức năng tĩnh không được lưu trữ (_ dữ liệu: Dữ liệu!) -> Gói {
var archivedPacket = ArchivedPacket(index: 0, numberOfPackets: 0, nameLength: 0) //, dataLength: 0
hãy archivedStructLength = sizeof(ArchivedPacket)

hãy archivedData = data.subdata(in: NSMakeRange(0, archivedStructLength))
(archivedData dưới dạng NSData).getBytes(&archivedPacket)

hãy để nameRange = NSMakeRange(archivedStructLength, Int(archivedPacket.nameLength))
hãy để nameData = data.subdata(in: nameRange)
hãy đặt tên = NSString(dữ liệu: nameData, mã hóa: String.Encoding.utf8) chuỗi!
let packet = Packet(name: name, index: archivedPacket.index, numberOfPackets: archivedPacket.numberOfPackets)

trả lại gói
}

EDIT: Đây là mã hoàn chỉnh cho cấu trúc:

nền tảng nhập khẩu
/**
*Gói
*/
Gói cấu trúc {
tên var: Chuỗi
chỉ số var: Int64
số varOfPackets: Int64

/**
*Cấu trúc
*/
cấu trúc ArchivePacket {
chỉ số var: Int64
var numberOfPackets : Int64
Tên var Chiều dài: Int64
}
/**
Gói lưu trữ

- trả về: NSData
*/
kho lưu trữ func() -> Dữ liệu {

var archivedPacket = ArchivedPacket(index: Int64(self.index), numberOfPackets: Int64(self.numberOfPackets), nameLength: Int64(self.name.lengthOfBytes(using: String.Encoding.utf8)))

hãy để siêu dữ liệu = Dữ liệu (
byte: UnsafePointer(&archivedPacket),
đếm: sizeof(ArchivedPacket)
)

hãy archivedData = Dữ liệu (dữ liệu: siêu dữ liệu) dưới dạng Dữ liệu
archivedData.append(name.data(sử dụng: String.Encoding.utf8, allowLossyConversion: false)!)

trả lại dữ liệu đã lưu trữ
}
/**
Gói hủy lưu trữ

- dữ liệu tham số: NSData

- trả về: Gói
*/
chức năng tĩnh không được lưu trữ (_ dữ liệu: Dữ liệu!) -> Gói {
var archivedPacket = ArchivedPacket(index: 0, numberOfPackets: 0, nameLength: 0) //, dataLength: 0
hãy archivedStructLength = sizeof(ArchivedPacket)

hãy archivedData = data.subdata(in: NSMakeRange(0, archivedStructLength))
(archivedData dưới dạng NSData).getBytes(&archivedPacket)

hãy để nameRange = NSMakeRange(archivedStructLength, Int(archivedPacket.nameLength))
hãy để nameData = data.subdata(in: nameRange)
hãy đặt tên = NSString(dữ liệu: nameData, mã hóa: String.Encoding.utf8) chuỗi!
let packet = Packet(name: name, index: archivedPacket.index, numberOfPackets: archivedPacket.numberOfPackets)

trả lại gói
}
}

câu trả lời hay nhất

Bạn làm điều này bằng cách chuyển đổi sang NSRange Làm cho nó quá phức tạp. Điều này hoạt động:

hãy archivedData = data.subdata(in: 0..<>
hãy để nameData = data.subdata(in: archiveStructLength..<(archiveStructLength + Int(archivedPacket.nameLength)))

Về Swift - Không thể chuyển đổi giá trị của loại 'NSRange' (còn gọi là 'NSRange' ) thành loại đối số dự kiến ​​'Range' (còn gọi là 'Range' ), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow : https://stackoverflow.com/questions/38031612/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress