swift - 将 UnicodeScalar 索引转换为 String.Index
问题描述
我正在使用一个将位置作为 UnicodeScalar 索引返回的解析器。在我这边,我使用的是常规的 Swift String 和String.Index
.
考虑到字素簇,如何将 UnicodeScalar 索引转换为常规 String.Index?
let flags = ""
例如,将开始创建问题,因为它具有来自单个字符的 2 个 unicode 标量。
注意:我使用的是 Swift 4.2
解决方案
各种 String 视图共享一个公共索引。如果您有一个位置作为 UnicodeScalar 视图的偏移量,则使用String.unicodeScalars.index()
将其转换为String.Index
. 例子:
let s = ""
print(Array(s.unicodeScalars))
// ["\u{0001F1E6}", "\u{0001F1F9}", "\u{0001F1E7}", "\u{0001F1EA}"]
let ucOffset = 2
let sIndex = s.unicodeScalars.index(s.startIndex, offsetBy: ucOffset)
print(s[sIndex...]) //
反向计算是用 完成的distance(from:to:)
。例子:
let s = ""
if let sIndex = s.index(of:"") {
let ucOffset = s.unicodeScalars.distance(from: s.startIndex, to: sIndex)
print(ucOffset) // 2
}
推荐阅读
- java - 无法在 android 中更新我的 Realm 数据库
- python - 列表理解问题中的赋值表达式范围
- python - 在 Pymongo 中动态构建 mongoDB 查询
- unicode - utf8编码让我很困惑
- flutter - 无法从 Future 返回对象列表
- python - 如何同时转义 Python 和 Postgres SQL 中的保留字?
- java - 如何使用 Spring Boot 实现最多一次交付消费者语义
- c++ - 指针和 PROGMEM 的问题
- jquery - 在 React 门户中执行 Jquery
- javascript - 如何为可构造的 JavaScript 对象上的属性创建陷阱