IOS Как получить String.range(of:string) несколько в Swift
MyText is
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
имеет один <siren>
это работает, но это не работает, когда у него более двух <siren>
заменить только первый <siren>
Я думаю String.range
вернуть первое значение
как найти их всех?
1 ответ
Решение
Если вы хотите найти все диапазоны, вы можете попробовать использовать решение из этого вопроса, чтобы получить все диапазоны подстроки в строке в swift
но если вашей основной целью является замена вхождения какой-либо строки / шаблона, вы можете добавить расширение следующим образом:
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)
}
}