您可以将每个十六进制字符串转换为UInt32,为每个元素初始化一个Unicode.Scalar,并从中创建一个StringUnicodeScalarView:
let arr = ["0023", "FE0F", "20E3"]
let values = arr.compactMap{ UInt32($0, radix: 16) }
let unicodeScalars = values.compactMap(Unicode.Scalar.init)
let string = String(String.UnicodeScalarView(unicodeScalars))
也可以写成单行:
let arr = ["0023", "FE0F", "20E3"]
let string = String(String.UnicodeScalarView(arr.compactMap{ UInt32($0, radix: 16) }.compactMap(Unicode.Scalar.init)))
编辑/更新:
如果您的所有字符串都可以用 UInt16 值表示,您还可以使用字符串初始化器 init(utf16CodeUnits: UnsafePointer<unichar>, count: Int),如 @MartinR here 所示:
let arr = ["0023", "FE0F", "20E3"]
let values = arr.compactMap { UInt16($0, radix: 16) }
let string = String(utf16CodeUnits: values, count: values.count) // "#️⃣"