ios - 在 TextView 中使用 separatedBy 函数获取范围

标签 ios swift

我正在使用 components(separatedBy)段落分隔功能。

let components = UItextView.text.components(separatedBy: “\n”)

这将返回一个字符串数组。我需要能够获得范围的信息以及每个范围的“id”以便能够识别它。我不知道我会怎么做。我是否需要以某种方式使用 token ?

编辑:我所说的“id”只是一个标识符,我必须能够识别哪个段落与哪个组件相关。这是因为如果在 2 个已存在的段落之间添加一个段落,则通过数组进行计数将不准确。

对于范围,我想要分隔段落的 Swift 范围。示例:Range<String.Index>(3..<8)

最佳答案

比 PGDev 建议的更实用的方法:

let str = """
Paragraph 1
Paragraph 2
Paragraph 3
Paragraph 4
"""

struct ParagraphModel: Hashable {
    let text: String
    let range: Range<String.Index>

    init(withText text: String, range: Range<String.Index>) {
        self.text = text
        self.range = range
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(text)
        hasher.combine(range.lowerBound)
        hasher.combine(range.upperBound)
    }
}

let components = str.components(separatedBy: "\n")
let models = components.compactMap { component -> ParagraphModel? in
    if let range = str.range(of: component) {
        return ParagraphModel(withText: component, range: range)
    }
    return nil
}

id 将是模型的 hashValue

关于ios - 在 TextView 中使用 separatedBy 函数获取范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56524902/

相关文章:

ios - 具有组合条件的 DynamoDB 查询/扫描

ios - 获取 curl : (22) The requested URL returned error: 403 Forbidden while installing linphone through cocoa pods?

android - 使用手机的唯一设备标识号而不是帐户

ios - 键盘与 IOS 中的 ListView 项内的文本字段重叠

ios - QLPreviewController自定义导航栏标题颜色?

swift - 延迟Google Cloud功能

ios - 写入上一个 Realm 对象而不是下一个

ios - 如何根据屏幕和网页分辨率调整 webView 的大小?

ios - 这种情况下Tableview的reloadData是否立即执行

iphone - MKOverlay 仅在 ios5 上覆盖具有奇怪情况的所有内容?