0

是否有任何内置解决方案允许以 do 的方式替换字符串NSExpression(即提供绑定字典)?

所以而不是:

let s = String(format: "%@ %@", arguments: ["foo", "bar"]) // "foo bar"

我们有:

let s = String(format: "$foo $bar", ["foo": "hello", "bar": "world"]) // hello world

PS 我知道replaceOccurrences,我需要 NSExpression 样式替换。谢谢!

4

1 回答 1

1

正如马特已经提到的,您需要实现自己的方法。您可以使用正则表达式来匹配以美元符号开头的字典中所有键的范围,"\\$\\w+"并使用"ranges(of:)"答案的方法来替换字符串的子范围,从而创建扩展字符串的自定义初始化程序:

extension String {
    init(format: String, _ dictionary: [String: String]) {
        var result = format
        for range in format.ranges(of: "\\$\\w+", options: .regularExpression).reversed() {
            result.replaceSubrange(range, with: dictionary[String(format[range].dropFirst())] ?? "")
        }
        self = result
    }
}

游乐场测试:

let result = String(format: "$foo $bar", ["foo": "hello", "bar": "world"])
print(result)   // "hello world"
于 2018-01-27T01:12:39.793 回答