Метод Swift 3 для создания данных, закодированных utf8 из строки
Я знаю, что есть куча вопросов до Swift3 относительно материала NSData. Мне любопытно, как перейти между Swift3 String
в кодировку utf8 (с нулевым завершением или без) для объекта Swift3 Data
.
Лучшее, что я придумал до сих пор:
let input = "Hello World"
let terminatedData = Data(bytes: Array(input.nulTerminatedUTF8))
let unterminatedData = Data(bytes: Array(input.utf8))
Выполнение промежуточной конструкции Array()
кажется неправильным.
Ответы
Ответ 1
Это просто:
let input = "Hello World"
let data = input.data(using: .utf8)!
Если вы хотите завершить data
нулевым, просто append
a 0. Или вы можете позвонить cString(using:)
let cString = input.cString(using: .utf8)! // null-terminated
Ответ 2
NSString
методы из структуры NSFoundation
следует отбросить в пользу эквивалентов стандартной библиотеки Swift. Данные могут быть инициализированы любым Sequence
, элементами которого являются UInt8
. String.UTF8View
удовлетворяет этому требованию.
let input = "Hello World"
let data = Data(input.utf8)
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
Нет такой вещи, как представление данных строки с нулевым завершением. Строковое нулевое завершение - это детали реализации языка C, и он не должен течь снаружи.
Если вы планируете работать с C API-интерфейсами, посмотрите следующее свойство String
:
public var utf8CString: ContiguousArray<CChar> { get }