Explicação da resposta na%02.2hhx
votação alta :
%
: Apresenta o x
especificador de conversão.
02
: A largura mínima do valor convertido é 2. Se o valor convertido tiver menos bytes que a largura do campo, deverá ser preenchido 0
à esquerda.
.2
: Fornece o número mínimo de dígitos a serem exibidos para o x
especificador de conversão.
hh
: Especifica que o x
especificador de conversão se aplica a um argumento de caractere assinado ou não assinado (o argumento será promovido de acordo com as promoções de números inteiros, mas seu valor será convertido em caractere assinado ou não assinado antes da impressão).
x
: O argumento não assinado deve ser convertido para o formato hexadecimal não assinado no estilo "dddd"; as letras "abcdef" são usadas. A precisão especifica o número mínimo de dígitos a serem exibidos; se o valor que está sendo convertido puder ser representado em menos dígitos, ele será expandido com zeros à esquerda. A precisão padrão é 1. O resultado da conversão de zero com uma precisão explícita de zero não deve conter caracteres.
Para mais detalhes, consulte a especificação IEEE printf .
Com base na explicação acima, acho melhor mudar %02.2hhx
para %02x
ou %.2x
.
Para o Swift 5, os seguintes métodos são todos viáveis:
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)})
O teste é o seguinte:
let deviceToken = (0..<32).reduce(Data(), {$0 + [$1]})
print(deviceToken.reduce("", {$0 + String(format: "%.2x", $1)}))
// Print content:
// 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
NSLog
, aquele que imprimenewDeviceToken
?