Я не понимаю, что здесь происходит:
let strA = "0123456789"
let fromA = String.Index(encodedOffset: 2)
let toA = String.Index(encodedOffset: 8)
print("\(String(strA[fromA..<toA]))") // Prints "234567".
let strB = "0123??56?89"
let fromB = String.Index(encodedOffset: 2)
let toB = String.Index(encodedOffset: 8)
print("\(String(strB[fromB..<toB]))") // Prints "23??".
Я ожидаю, что нижняя строка напечатает "23??56?"
, но напечатает "23??"
.Похоже, это проблема, связанная с кодовыми точками Юникода и частичным обрезанием части последнего символа смайлика Юникода.
Как получить ожидаемую строку "23??56?"
, используя смещения видимых символов?
Моя проблема связана с API-интерфейсом Twitter и его расширенными объектами JSON твитов, которые требуют, чтобы вы сократили размер текста твита до размера, используя значения display_text_range
.Прямо сейчас мой код вылетает всякий раз, когда в твите есть эмодзи, поскольку мой код подстроки, как указано выше, повреждает строку.