因此,我正在try 为Swift上的String类创建一个替换函数,以符合它在Python上的工作方式(要替换的字符串,要替换的字符串,count to be replaced),我发现@rmaddy的这个扩展可以做到这一点,但是当我将它添加到我的XCode项目中时,我得到了错误:
在"Range"上引用初始值设定项"init(_:)"要求"String.Index"符合"Strideable"
//Developed by rmaddy @ https://stackoverflow.com/users/2303865/rmaddy
extension String {
func replacingOccurrences<Target, Replacement>(of target: Target, with replacement: Replacement, count: Int, options: String.CompareOptions = [], range searchRange: Range<String.Index>? = nil) -> String where Target : StringProtocol, Replacement : StringProtocol {
var matches = [Range<String.Index>]()
//This is where I get the error
var sRange = searchRange ?? Range(startIndex..<endIndex)
while matches.count < count && !sRange.isEmpty {
if let mRange = range(of: target, options: options, range: sRange, locale: nil) {
matches.append(mRange)
if options.contains(.backwards) {
sRange = Range(sRange.lowerBound..<mRange.lowerBound)
} else {
sRange = Range(mRange.upperBound..<sRange.upperBound)
}
} else {
break
}
}
var res = self
for range in matches.sorted(by: { $0.lowerBound > $1.lowerBound }) {
res.replaceSubrange(range, with: replacement)
}
return res
}
}
我已try 查看SWIFT文档,但找不到如何修复此问题,请帮助.
需要说明的是,我希望替换文本文件(作为脚本读取)中某个单词的多次出现,但不是全部.我没有使用查找和替换功能,因为我希望它是动态的,并且能够基于算法挑选替换单词.基本上,我是在做一件事,将"say"的出现改变为"exaved"和其他同义词.该项目是一个长文本文件的解释引擎,它在Python上运行很容易,但在Swift上重写它是非常有挑战性的.
感谢你们抽出时间来,各位.