Вы можете преобразовать каждую гекса-строку в UInt32
, инициализировать Unicode.Scalar
для каждого элемента и создать из него String
UnicodeScalarView
:
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 здесь :
let arr = ["0023", "FE0F", "20E3"]
let values = arr.compactMap { UInt16($0, radix: 16) }
let string = String(utf16CodeUnits: values, count: values.count) // "#️⃣"