我希望在Swift中实现一些简单的字符串模板,并且想知道在运行时使用值替换字符串中的宏的内置选项。
如果有一种方法可以让我在运行时使用字符串插值语法"\(variable)"
,那将是很棒的,但是我猜这些实际上是在编译时解析的,因为宏可以包含实际的代码。
我还发现了一个String
构造函数,它使用%@等接受Objective-C样式的格式字符串。
let myString = String(format: "Hello %@", name)
这可行,但我更喜欢语法。我只是想知道是否应该采取更好的方法,或者如果我自己编写更好的方法。
能够在宏中执行命令(如运算符或方法/属性调用)会很棒,但不是必需的(考虑Swift语言的静态性,不是预期的)。
答案 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)
}
}