运行时快速字符串插值

时间:2016-01-28 19:26:55

标签: swift string-interpolation

我希望在Swift中实现一些简单的字符串模板,并且想知道在运行时使用替换字符串中的宏的内置选项。

如果有一种方法可以让我在运行时使用字符串插值语法"\(variable)",那将是很棒的,但是我猜这些实际上是在编译时解析的,因为宏可以包含实际的代码。

我还发现了一个String构造函数,它使用%@等接受Objective-C样式的格式字符串。

let myString = String(format: "Hello %@", name)

这可行,但我更喜欢语法。我只是想知道是否应该采取更好的方法,或者如果我自己编写更好的方法。

能够在宏中执行命令(如运算符或方法/属性调用)会很棒,但不是必需的(考虑Swift语言的静态性,不是预期的)。

1 个答案:

答案 0 :(得分:1)

import Foundation

let serverName = "Fantastic"
var resultString = "We are using $SERVERNAME$"

if let range = resultString.rangeOfString("$SERVERNAME$") {
  resultString.replaceRange(range, with: serverName)
}

如果您要定期使用此扩展程序,您当然可以实施String扩展程序。

extension String {
    func replaceString(sourceString:String, withNewElements newElements:String) throws {
    //implementation left for the reader
        let userInfo = ["missingString": sourceString,
            "message": "Substring '\(sourceString)' not found in '\(self)'"]
        throw NSError(domain: "ReplaceStringFailure", code: 1, userInfo: userInfo)
    }
}