If you need to keep only ascii printable characters in a string you can just filter them checking if their unicodeScalar values are ascii:
extension Character {
var isAscii: Bool {
return unicodeScalars.allSatisfy { $0.isASCII }
}
}
extension RangeReplaceableCollection where Self: StringProtocol {
var asciiPrintable: Self {
return filter { $0.isAscii }
}
}
let string = "cafe\u{301}"
let asciiPrintable = string.asciiPrintable
print(asciiPrintable) // "caf"