【发布时间】:2019-04-18 09:43:33
【问题描述】:
我不明白这里发生了什么:
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????????"。这似乎是一个与 unicode 代码点有关的问题,并且部分切除了最后一个 unicode 表情符号字符的一部分。
如何使用可见字符的偏移量获得预期的"23????????56????" 字符串?
我的问题源于 Twitter 的 API 及其扩展推文 JSON 对象,这些对象要求您使用 display_text_range 值将推文文本缩小到合适的大小。现在,只要推文中有表情符号,我的代码就会崩溃,因为如上所述,我的子字符串代码会破坏字符串。
【问题讨论】:
-
为什么这么复杂?
let truncatedString = String(str.prefix(maximalLength))呢? -
@MartinR 他将无法使用前缀方法获取子字符串。
-
@Dan:看看How does String substring work in Swift,它解释了问题并显示了解决问题的各种方法。
-
@MartinR 谢谢!这个答案确实有帮助。我现在将回答我自己的问题。
标签: ios swift xcode twitter unicode