2014-10-02 6 views
11

Używam emotikonów w Swifcie, korzystając z Xcode placu zabaw dla prostych aplikacji iOS8. W tym celu chcę stworzyć coś podobnego do mapy/opisu unicode/emoji.Jak wyświetlić listę (prawie) wszystkich emotikonów w Swift na iOS 8 bez używania tabel lookup?

W tym celu potrzebuję pętli, która pozwoli mi wydrukować listę emotikonów. Myślałam o czymś wzdłuż tych linii

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 
} 

Ale println() zgłasza błąd

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

Czy istnieje prosty sposób to zrobić, których mi brakuje?

Rozumiem, że nie wszystkie wpisy będą odpowiadać emoji. Ponadto, jestem w stanie utworzyć tabelę odnośników z referencją od http://apps.timwhitlock.info/emoji/tables/unicode, ale chciałbym uzyskać leniwą/łatwą metodę osiągnięcia tego samego.

+0

Niedawno napisałem najważniejszy dostępny [tutaj] (https://gist.github.com/Kametrixom/b2e89e467297a42226fd), który pobiera wszystkie standardowe emoji Unicode ze strony internetowej, analizuje je i drukuje je. Drukuje również wszystkie emoja z kodem kraju od AA do ZZ. Wiem, że nie chcesz używać do tego sieci, ale myślę, że ktoś inny mógłby z tego skorzystać. Możesz także zmodyfikować go tak, aby utworzyć listę numerów emotikonów, które można następnie użyć offline. – Kametrixom

Odpowiedz

38

można pętli nad tymi wartościami sześciokątnych z Range: 0x1F601...0x1F64F a następnie utworzyć String s przy użyciu UnicodeScalar:

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

Wyjścia:

Jeśli chcesz wszystkie emoji, po prostu dodaj kolejną pętlę w szeregu zakresów:

// 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) 
    } 
} 
+0

+1 Jest to o wiele lepsze niż dziwne przykłady 'CFStringTransform', z którymi grałem. –

+0

Świetne rozwiązanie @Mike. To sprawia, że ​​jest tak prosty, ale piękny. – Yogesh

+2

To jest świetne. Ale gdzie znalazłeś te zakresy punktów kodu Unicode? Czy te zakresy obejmują wszystkie emoji? Od kiedy? – algal

Powiązane problemy