更新时间: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
)