以下代码在 Swift6 中会产生警告:
'init(cString:)' 已被弃用:截断空终止符后,请改用 String(decoding: array, as: UTF8.self)。
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)
写作:
return String(decoding: modelIdentifier, as: UTF8.self)
产生错误:
表达式类型不明确,没有类型注释
我该如何摆脱它?
不幸的是,这是
String(decoding:as:)
因为即,
codeUnits
需要是的集合UTF8.CodeUnit
,并且UTF8.CodeUnit
是UInt8
,而不是CChar
。相反,您可以使用
String(utf8String:)
,它直接采用[CChar]
: