IOS如何在swift中获取String.range(of:String)倍数

IOS如何在swift中获取String.range(of:String)倍数,ios,swift,swift3,nsmutablestring,Ios,Swift,Swift3,Nsmutablestring,我的文本是 let myString: NSAttributedString = <siren> 123123 <siren> 123123 <siren> let myRange = myString.string.range(of:"<siren>") let newString = NSMutableAttributedString() newString.append(myString) if myRange != nil{ newSt

我的文本是

let myString: NSAttributedString = <siren> 123123 <siren> 123123 <siren>
let myRange = myString.string.range(of:"<siren>")
let newString = NSMutableAttributedString()
newString.append(myString)
if myRange != nil{
  newString.replaceCharacters(in: NSRange(myRange, in:myString.string), 
            with:myAttributeString as NSAttributedString!)
}
让myString:nsAttributeString=123123
让myRange=myString.string.range(共:“”)
让newString=nsmutableAttributeString()
newString.append(myString)
如果是myRange!=零{
newString.replaceCharacters(在:NSRange(myRange,在:myString.string中),
使用:myAttributeString作为NSAttributeString!)
}
如果
myString
有一个
,这是有效的,但当它有两个以上

仅更换第一个

我认为
String.range
返回第一个值


如何查找所有范围?

如果要查找所有范围,可以尝试使用此问题的解决方案

但是,如果您的主要目的是替换某些字符串/模式的出现,您可以添加这样的扩展:

extension String {

  func replacing(pattern: String, withTemplate: String) throws -> String {
    let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
    return regex.stringByReplacingMatches(in: self,
                                          options: [],
                                          range: NSRange(0 ..< utf16.count),
                                          withTemplate: withTemplate)
  }
}
扩展字符串{
func替换(模式:字符串,带模板:字符串)抛出->字符串{
让regex=try NSRegularExpression(模式:模式,选项:。不区分大小写)
返回regex.stringByReplacingMatches(in:self,
选项:[],
范围:NSRange(0..
a)这不是工作代码。b) 不要以大写字母开头变量,这样很难根据变量确定类。请使用字符串更新可能重复的工作,然后将其转换为属性字符串