使用Swift中的范围从属性字符串返回子字符串

时间:2019-03-24 20:48:37

标签: ios swift range substring nsrange

我正在尝试使用不带运气的范围从字符串中获取子字符串。在上下搜索之后,我找不到在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)

但是,当我尝试此操作时,出现错误:

  

无法用索引类型下标“字符串”类型的值   'NSRange'(aka'_NSRange')

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

2 个答案:

答案 0 :(得分:1)

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

您会注意到,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

答案 1 :(得分:1)

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

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