Как перечислить (почти) все emojis в Swift для iOS 8 без использования каких-либо форм таблиц поиска?

Я играю с emojis в Swift с помощью игровой площадки Xcode для некоторых простых приложений iOS8. Для этого я хочу создать нечто похожее на карту/описание unicode/emoji.

Чтобы сделать это, мне нужен цикл, который позволит мне распечатать список emojis. Я думал о чем-то в этом направлении

for i in 0x1F601 - 0x1F64F {
    var hex = String(format:"%2X", i)
    println("\u{\(hex)}") //Is there another way to create UTF8 string corresponding to emoji
}

Но println() выдает ошибку

Expected '}'in \u{...} escape sequence. 

Есть ли простой способ сделать это, который мне не хватает?

Я понимаю, что не все записи будут соответствовать emoji. Кроме того, я могу создать справочную таблицу со ссылкой http://apps.timwhitlock.info/emoji/tables/unicode, но я бы хотел, чтобы ленивый/простой способ достичь того же.

Ответ 1

Вы можете перебрать эти шестнадцатеричные значения с помощью Range: 0x1F601...0x1F64F, а затем создать String с помощью UnicodeScalar:

for i in 0x1F601...0x1F64F {
    var c = String(UnicodeScalar(i))
    print(c)
}

Выходы:

😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯 😰😱😲😳😴😵😶😷😸😹😺😻😼😽😾😿🙀🙁🙂🙃🙄🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏

Если вы хотите все emoji, просто добавьте еще один цикл в массив диапазонов:

// NOTE: These ranges are still just a subset of all the emoji characters;
//       they seem to be all over the place...
let emojiRanges = [
    0x1F601...0x1F64F,
    0x2702...0x27B0,
    0x1F680...0x1F6C0,
    0x1F170...0x1F251
]

for range in emojiRanges {
    for i in range {
        var c = String(UnicodeScalar(i))
        print(c)
    }
}