Итерации через алфавит в Свифт

в Obj-C можно было перебирать по алфавиту с помощью:

for (char x='A'; x<='Z'; x++) {

В Swift это невозможно. Любая идея, как я могу это сделать?

Ответ 1

В Swift вы можете перебирать символы в строке следующим образом:

Swift 2

for char in "abcdefghijklmnopqrstuvwxyz".characters {
    println(char)
}

Swift 1.2

for char in "abcdefghijklmnopqrstuvwxyz" {
    println(char)
}

Однако может быть лучший способ.

Ответ 2

Это немного громоздко, но следующие работы:

    for val in UnicodeScalar("a").value...UnicodeScalar("z").value
    {
        let x = UnicodeScalar(val);
        println(x)
    }

Я подозреваю, что проблема здесь в том, что значение "a"... "z" потенциально может быть различным для разных строковых кодировок.

Также громоздко, но без дополнительной промежуточной переменной:

    for letter in map(UnicodeScalar("a").value...UnicodeScalar("z").value, {(val: UInt32) -> UnicodeScalar in return UnicodeScalar(val); })
    {
        println(letter)
    }

Ответ 3

for i in 97...122{println(UnicodeScalar(i))}

Ответ 4

Это решение работает с Swift 3.0 и будет либо распечатывать значения для запроса OP:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.flatMap { print($0) }

Или укажите массив букв:

let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.flatMap { $0.description }

Ответ 5

Вы попробовали этот?

for var myChar:CChar = 65 ; myChar <= 90 ; ++myChar {
      let x:String = String(format: "%c", myChar)
      println(x)
}

Если вы уже знаете код символа

Ответ 6

Обновлено для Swift 3.0 и выше

let startChar = Unicode.Scalar("A").value
let endChar = Unicode.Scalar("Z").value

for alphabet in startChar...endChar {

    if let char = Unicode.Scalar(alphabet) {

        print(char)
    }
}