我想编写一个可以像这样使用的函数:
let 👩👩👧👦 = "👩👩👧👧".replacingFirstOccurrence(of: "👧", with: "👦")
给定how odd both this string and Swift's
String
library are,这在Swift中可能吗? 最佳答案
使用 range(of:options:range:locale:)
,解决方案变得非常简洁:
extension String {
func replaceFirstOccurrence(of searchString: String, with replacementString: String) -> String {
guard let range = self.range(of: searchString, options: .literal) else { return self }
return self.replacingCharacters(in: range, with: replacementString)
}
}
这是通过首先在实例中找到
searchString
的范围来实现的,如果找到了范围,则将范围替换为replacementString
。否则,实例将返回自身。并且,由于range(of:)
方法在找到匹配项后立即返回,因此保证返回的范围是第一次出现。"221".replaceFirstOccurrence(of: "2", with: "3") // 321
"👩👩👧👦".replaceFirstOccurrence(of: "\u{1f469}", with: "\u{1f468}") // 👨👩👧👦
*为了明确起见,最后一个测试用例将女人-女人-女孩-男孩转换为男人-女人-女孩-男孩。