Giải thích về câu trả lời%02.2hhx bỏ phiếu cao :
%: Giới thiệu công xcụ xác định chuyển đổi.
02: Chiều rộng tối thiểu của giá trị được chuyển đổi là 2. Nếu giá trị được chuyển đổi có ít byte hơn chiều rộng trường, nó sẽ được đệm 0bên trái.
.2: Cung cấp số chữ số tối thiểu xuất hiện cho x xác định chuyển đổi.
hh: Chỉ định rằng x xác định chuyển đổi áp dụng cho đối số char đã ký hoặc char không dấu (đối số sẽ được quảng cáo theo các quảng cáo số nguyên, nhưng giá trị của nó sẽ được chuyển đổi thành char đã ký hoặc char không dấu trước khi in).
x: Đối số không dấu sẽ được chuyển đổi sang định dạng thập lục phân không dấu trong kiểu "dddd"; các chữ cái "abcdef" được sử dụng. Độ chính xác chỉ định số chữ số tối thiểu xuất hiện; nếu giá trị được chuyển đổi có thể được biểu thị bằng ít chữ số hơn, nó sẽ được mở rộng với các số 0 đứng đầu. Độ chính xác mặc định là 1. Kết quả của chuyển đổi 0 với độ chính xác rõ ràng bằng 0 sẽ không có ký tự.
Để biết thêm chi tiết, xem thông số kỹ thuật của printf .
Dựa trên lời giải thích trên, tôi nghĩ tốt hơn là thay đổi %02.2hhxthành %02xhoặc %.2x.
Đối với Swift 5, các phương pháp sau đây đều khả thi:
deviceToken.map({String(format: "%02x", $0)}).joined()
deviceToken.map({String(format: "%.2x", $0)}).joined()
deviceToken.reduce("", {$0 + String(format: "%02x", $1)})
deviceToken.reduce("", {$0 + String(format: "%.2x", $1)})
Bài kiểm tra như sau:
let deviceToken = (0..<32).reduce(Data(), {$0 + [$1]})
print(deviceToken.reduce("", {$0 + String(format: "%.2x", $1)}))
// Print content:
// 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
NSLog, cái nào in ranewDeviceToken?