Быстрое преобразование «символов» в «Unicode.Scalar» - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь отфильтровать не алфавитные символы из строки, но сталкиваюсь с проблемой, что CharacterSet использует Unicode.Scalar, а String состоит из Character (не так, имеет CharacterSet и не принимает Character??? !!)

let allowedCharacters = CharacterSet.alphanumerics
let filteredName = name.filter { (c) -> Bool in
    if let s: Unicode.Scalar = c { // cannot convert
        return !allowedCharacters.contains(s)
    }
    return true
}

1 Ответ

0 голосов
/ 05 декабря 2018

Один Character может состоять из нескольких UnicodeScalar с, поэтому вам нужно перебрать все из них и проверить, содержатся ли они в CharacterSet.alphanumerics.

let allowedCharacters = CharacterSet.alphanumerics
let filteredName = name.filter { (c) -> Bool in
    return !c.unicodeScalars.contains(where: { !allowedCharacters.contains($0)})
}

Тестовый вход: let name = "asd?1"

Тестовый вывод: "asd1"

...