Как перечислить (почти) все 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)
}
}