Dlaczego te dwie linie dają różne wyniki?Swift string count() vs NSString .length not equal
var str = "Hello " // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
Original dla odniesienia:
Dlaczego te dwie linie dają różne wyniki?Swift string count() vs NSString .length not equal
var str = "Hello " // the square is an emoji
count(str) // returns 7
(str as NSString).length // returns 8
Original dla odniesienia:
Dzieje się tak dlatego, że Swift wykorzystuje klastry Extended Grapheme. Swift postrzega buźkę jako jedną postać, ale metoda NSString traktuje ją jako dwie postacie Unicode, chociaż są one "połączone" i reprezentują pojedynczy symbol.
myślę documentation mówi to najlepiej:
Charakter Liczba zwrócony przez count (_ :) funkcja nie zawsze jest tak samo jak właściwość length NSString, która zawiera te same znaki. Długość NSString jest oparta na liczbie 16-bitowych jednostek kodowych w ciągu znaków UTF-16, a nie na liczbie rozszerzonych klastrów Unicode w ciągu znaków. Aby odzwierciedlić ten fakt, właściwość length z NSString nazywa się utf16Count, gdy jest on dostępny dla wartości Swift String.
'utf16Count' już nie istnieje w Swift 1.2, teraz jest to' count (str.utf16) '. –