O código a seguir produz um aviso no Swift6:
'init(cString:)' está obsoleto: use String(decoding: array, as: UTF8.self) em vez disso, depois de truncar a terminação nula.
var size = 0
sysctlbyname("hw.model", nil, &size, nil, 0)
var modelIdentifier: [CChar] = Array(repeating: 0, count: size)
sysctlbyname("hw.model", &modelIdentifier, &size, nil, 0)
return String(cString: modelIdentifier)
Escrita:
return String(decoding: modelIdentifier, as: UTF8.self)
produz um erro:
O tipo de expressão é ambíguo sem uma anotação de tipo
Como me livro disso?
Infelizmente, isso ocorre porque o tipo de
String(decoding:as:)
éou seja,
codeUnits
precisa ser uma coleção deUTF8.CodeUnit
, eUTF8.CodeUnit
éUInt8
, nãoCChar
.Em vez disso, você pode usar
String(utf8String:)
, que pega[CChar]
diretamente: