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

问题描述 投票:0回答:2

这个问题在这里已有答案:

我试图从一个字符串中获取一个子字符串使用该范围没有运气。经过高低搜索,我找不到办法在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”(又名“_NSRange”)下标“String”类型的值

我认为问题可能与使用NSRange而不是范围有关,但我无法弄清楚如何让它工作。谢谢你的任何建议。

ios swift range substring nsrange
2个回答
1
投票

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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.