String extension
String+Range.swift
import Foundation
extension String {
func nsRange(from range: Range<String.Index>) -> NSRange {
return NSRange(range, in: self)
}
func ranges(of searchString: String, options mask: NSString.CompareOptions = [], locale: Locale? = nil) -> [Range<String.Index>] {
var ranges: [Range<String.Index>] = []
while let range = range(of: searchString, options: mask, range: (ranges.last?.upperBound ?? startIndex)..<endIndex, locale: locale) {
ranges.append(range)
}
return ranges
}
func nsRanges(of searchString: String, options mask: NSString.CompareOptions = [], locale: Locale? = nil) -> [NSRange] {
let ranges = self.ranges(of: searchString, options: mask, locale: locale)
return ranges.map { nsRange(from: $0) }
}
}
FYI
NSString - Foundation | Apple Developer Documentation
Searching, Comparing, and Sorting Strings | Apple Developer Documentation