【问题标题】:convert unicodeScalars index to character index in a swift string将 unicodeScalars 索引转换为 swift 字符串中的字符索引
【发布时间】:2019-03-31 10:19:11
【问题描述】:

我有一个解析器,它使用字符串的 unicodeScalars 视图来计算索引。从解析器的结果。 我有一个NSTextView,我想根据解析器的结果放置插入符号。不幸的是,NSTextView 的 selectedRange 需要一个字符索引,而不是 unicodeScalar 索引。

如何将索引从 unicodeScalars 转换为 Characters?

【问题讨论】:

    标签: swift string parsing nstextview


    【解决方案1】:

    不同的字符串视图共享一个共同的String.IndexNSRange(_:in:) 可用于将String 范围转换为NSRange(这是selectedRange 需要的)。示例:

    let str = "??ab?cde"
    if let idx = str.unicodeScalars.firstIndex(of: "?") {
        let nsRange = NSRange(idx...idx, in: str)
    
        print(nsRange) // {6, 2}
        print((str as NSString).substring(with: nsRange)) // ?
    }
    

    【讨论】:

    • 我不知道这个 NSRange 功能!很棒的答案。谢谢!
    • 我在创建范围时收到Cannot invoke initializer for type 'init(_:in:)' with an argument list of type '(ClosedRange<Int>, in: String)'
    • @AP.:我在发布之前在我的 Xcode 10.2 中测试了上面的代码,它编译并运行没有问题。
    • 你使用的是哪个版本的 Swift?
    • @AP.:我用 Swift 5 (Xcode 10.2) 和 Swift 4.2 (Xcode 10.1) 测试了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多