Ответ 1
"Проблема" заключается в том, что символ Swift не соответствует Unicode кодовой точки, но представляет собой "расширенный кластер графемы", который может состоять из несколько сканеров Unicode. Например
let c : Character = "🇺🇸" // REGIONAL INDICATOR SYMBOL LETTERS US
- фактически последовательность двух сканеров Unicode.
Если мы проигнорируем этот факт, вы можете получить начальный сканер Unicode character (compare Как получить кодовую точку (символы) Unicode символа?) и проверить ее принадлежность в наборе символов:
let c : Character = "5"
let s = String(c).unicodeScalars
let uni = s[s.startIndex]
let digits = NSCharacterSet.decimalDigitCharacterSet()
let isADigit = digits.longCharacterIsMember(uni.value)
Это возвращает "true" для символов "0"... "9", но фактически для всех Сканеры Unicode "десятичная разрядная категория" , например:
let c1 : Character = "৯" // BENGALI DIGIT NINE U+09EF
let c2 : Character = "𝟙" // MATHEMATICAL DOUBLE-STRUCK DIGIT ONE U+1D7D9
Если вам нужны только цифры (ASCII) "0"... "9", тогда самый простой способ:
if c >= "0" && c <= "9" { }
или, используя диапазоны:
if "0"..."9" ~= c { }