Я сподівався, що буде щось на зразок stringFromCharactersInSet (), що дозволить мені вказати лише допустимі символи, які слід зберегти.
Ви можете використовувати або trimmingCharacters
з inverted
набором символів, щоб видалити символи з початку або кінця рядка. У Swift 3 і пізніших версіях:
let result = string.trimmingCharacters(in: CharacterSet(charactersIn: "0123456789.").inverted)
Або, якщо ви хочете видалити Ні-цифрові символи в будь-якому місці в рядку ( а не тільки в початку або в кінці), ви можете , наприклад , в Swift 4.2.1:filter
characters
let result = string.filter("0123456789.".contains)
Або, якщо ви хочете видалити символи з набору символів з будь-якого місця рядка, використовуйте:
let result = String(string.unicodeScalars.filter(CharacterSet.whitespaces.inverted.contains))
Або, якщо ви хочете збігатись лише з дійсними рядками певного формату (наприклад ####.##
), ви можете використовувати регулярний вираз. Наприклад:
if let range = string.range(of: #"\d+(\.\d*)?"#, options: .regularExpression) {
let result = string[range]
}
Поведінка цих різних підходів дещо відрізняється, тому це залежить лише від того, що ви намагаєтесь зробити. Включіть або виключіть десяткову крапку, якщо ви хочете десяткові числа, або просто цілі числа. Існує безліч способів досягти цього.
Щодо старшого синтаксису Swift 2, див. Попередню редакцію цієї відповіді .
inverted
на наборі символів у прикладі Swift 3?