我认为String.Index
是使用UnicodeScalar计算的。
但是,当我检查字符串的endIndex只包含一个表情符号时,Index
看起来像是UTF-16位置。
let string = "a"
string.utf16.count // 1
string.unicodeScalars.count // 1
print(string.endIndex)
// > Index(_base: Swift.String.UnicodeScalarView.Index(_position: 1), _countUTF16: 0)
//
let emoji = ""
emoji.utf16.count // 2
emoji.unicodeScalars.count // 1
print(emoji.endIndex)
// > Index(_base: Swift.String.UnicodeScalarView.Index(_position: 2), _countUTF16: 0)
//
虽然unicodeScalar.count是1
,但是position: 2
。为什么?
这就像utf16的位置。