Я искал исчерпывающий ответ о строковых манипуляциях в Swift. Опираясь на приведение к и из NSString
и других небезопасных указателей, магия просто не делала этого для меня. Вот безопасная альтернатива:
Сначала мы хотим расширить UInt8
. Это примитивный тип позади CodeUnit
.
extension UInt8 {
var character: Character {
return Character(UnicodeScalar(self))
}
}
Это позволит нам сделать что-то вроде этого:
let codeUnits: [UInt8] = [
72, 69, 76, 76, 79
]
let characters = codeUnits.map { $0.character }
let string = String(characters)
// string prints "HELLO"
Оборудовано этим расширением, теперь мы можем изменять строки.
let string = "ABCDEFGHIJKLMONP"
var modifiedCharacters = [Character]()
for (index, utf8unit) in string.utf8.enumerate() {
// Insert a "-" every 4 characters
if index > 0 && index % 4 == 0 {
let separator: UInt8 = 45 // "-" in ASCII
modifiedCharacters.append(separator.character)
}
modifiedCharacters.append(utf8unit.character)
}
let modifiedString = String(modifiedCharacters)
// modified string == "ABCD-EFGH-IJKL-MONP"