首页 > 解决方案 > Swift字符串替换并获得新范围

问题描述

字符串替换后检索范围的更好方法?

这是当前版本:

let username = "apple"
msgString = "{{user}} has an apple"
guard let range = msgString.range(of: "{{user}}") else { return }
msgString.replaceSubrange(range, with username)
userRange = msgString.range(of: username)

有没有更好的方法来获取用户名范围

标签: swiftrange

解决方案


我建议你创建一个类来做你多次做的事情

在此类中,您可以使用 replace 方法获取 stringRange 和 newReplacedString :

class StringService {

  /** create an object to access every method because this class provides you services */

  static let shared = StringService()


  /** Service classes should not be available for creating instances */

  private init () {}


  func replace(mySting: String ,by: String, with: String) -> (String,Range<String.Index>?) {

     var newString = ""

     if let range = myString.range(of:by) {

        newString.replaceSubrange(range,with:with)

        return (newString,range)

      }esle{

        return ("",nil)

      }
  }

用法 :

let replacedString = StringService.shared.replace(mySting: "myString is",
                                                  by: "is",
                                                  with: "was").0

if let replacedStringRange = StringService.shared.replace(mySting: "myString is",
                                                  by: "is",
                                                  with: "was").1 {

}

如果您想使用本机库,您可以使用:

"myString is".replacingOccurrences(of: "is",
                                   with: "was",
                                   options: .literal,
                                   range: nil)

推荐阅读