У меня есть код Swift, который анализирует кадр LLDP (протокол обнаружения канального уровня), включая поле, которое может быть произвольно определено поставщиком. Иногда это строка. Иногда это произвольная структура данных.
Вот как я беру данные и помещаю их в строку с кодировкой .utf8.
let ouiString = String(data: data[data.startIndex + 6 ..< data.startIndex + 2 + tlvLength], encoding: .utf8) ?? ""
Вот результирующая структура данных (часть перечисления с соответствующее значение). Выше «ouiString» теперь находится в конце поля «info: String».
case ouiSpecific(oui: String, subType: Int, info: String)
Вот как я генерирую описание:
case .ouiSpecific(let oui, let subType, let info):
return "OUI \(oui) subType \(subType) \(info)"
Вот пример описания, где исходные данные не были строкой. Не отображаемые символы отображаются так, как я считаю приемлемыми.
(lldb) po value.description
"OUI 00:12:0f subType 5 \0\u{11}\0\u{11}\0\u{11}\0\u{11}\0\u{11}"
Вот как я пытаюсь отобразить его в списке SwiftUI:
List(lldp.values, id: \.self) { value in
Text(value.description)
}
А вот изображение результирующее отображение в SwiftUI. Информационное поле со всеми экранированными неотображаемыми символами не отображается.

Как отобразить поле в текстовом представлении SwiftUI с не -дисплейные символы экранировали как в выводе "po"?