我想编写一个可以像这样使用的函数:

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}") // 👨‍👩‍👧‍👦

*为了明确起见,最后一个测试用例将女人-女人-女孩-男孩转换为男人-女人-女孩-男孩。

09-12 09:39