且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

快速获取字符串中子字符串的所有范围

更新时间:2023-02-21 15:55:32

以下解决方案使用本机Swift 4函数range(of:, options:, range:, locale:)):

The following solution uses the native Swift 4 function range(of:, options:, range:, locale:)):

extension String {
    func ranges(of substring: String, options: CompareOptions = [], locale: Locale? = nil) -> [Range<Index>] {
        var ranges: [Range<Index>] = []
        while ranges.last.map({ $0.upperBound < self.endIndex }) ?? true,
            let range = self.range(of: substring, options: options, range: (ranges.last?.upperBound ?? self.startIndex)..<self.endIndex, locale: locale)
        {
            ranges.append(range)
        }
        return ranges
    }
}

(然后Swift 4提供了本机API,可以从Range<Index>转换为NSRange)

(Swift 4 then provides native API to convert from Range<Index> to NSRange)