【问题标题】:Return substring from attributed string using range in Swift [duplicate]使用 Swift 中的范围从属性字符串返回子字符串 [重复]
【发布时间】:2019-03-24 20:48:37
【问题描述】:

我正在尝试使用范围从字符串中获取子字符串,但没有运气。在高低搜索之后,我找不到在 Swift 中完成这个看似简单的任务的方法。范围是从委托方法获得的 NSRange 形式。

在 Objective-c 中,如果你有一个范围,你可以这样做:

NSString * text = "Hello World";
NSString *sub = [text substringWithRange:range];

根据this answer,以下内容应该可以在 Swift 中使用:

let mySubstring = text[range]  // play
let myString = String(mySubstring)

但是,当我尝试这个时,我得到一个错误:

不能用类型索引为“String”类型的值下标 “NSRange”(又名“_NSRange”)

我认为这个问题可能与使用 NSRange 而不是范围有关,但我不知道如何让它工作。感谢您的任何建议。

【问题讨论】:

    标签: ios swift range substring nsrange


    【解决方案1】:

    问题是您不能使用NSRangeString 下标,您必须使用Range。尝试以下方法:

    let newRange = Range(range, in: text)
    let mySubstring = text[newRange]
    let myString = String(mySubstring)
    

    【讨论】:

    • Swift 4 你可以使用新的 Range 初始化器init?(_ range: NSRange, in string: String)。在这种情况下let newRange = Range(range, in: text)
    • 酷,现在没有,只是编辑了我的答案。谢谢。
    【解决方案2】:

    请再读一遍您链接的问题。

    您会注意到,Swift 中的 String 不适用于 Range<Int>,但适用于 Range<String.Index>,而且绝对不适用于 NSRange

    在字符串上使用范围的示例:

    let text = "Hello world"
    let from = text.index(after: text.startIndex)
    let to = text.index(from, offsetBy: 4)
    text[from...to] // ello
    

    【讨论】:

      猜你喜欢
      • 2017-07-17
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      相关资源
      最近更新 更多