一个简单的 Swift Mustache 解析器/求值器。
Mustache 是一种非常简单的模板语言。 几乎所有编程语言都有其实现(请查看 Mustache 网站) - 这是 Swift 的一个实现。
在 Noze.io 的上下文中,你不需要手动调用它,可以直接在 Noze.io 的 Express 模块中使用 Mustache 模板支持。 请查看 express-simple 应用程序示例,了解如何执行此操作。
此 Mustache 实现带有一个非常简单的键值编码实现,用于从模型对象中提取值以进行渲染。 通过它,你可以渲染通用的 Dictionary/Array 结构以及带有属性的 Swift 对象。 由于 Swift 的反射能力非常有限,因此 KVC 实现也受到限制。
Mustache 示例
Hello {{name}}
You have just won {{& value}} dollars!
{{#in_ca}}
Well, {{{taxed_value}}} dollars, after taxes.
{{/in_ca}}
{{#addresses}}
Has address in: {{city}}
{{/addresses}}
{{^addresses}}
Has NO addresses
{{/addresses}}
该模板具有值访问功能:{{name}}
,条件功能:{{#in_ca}}
,以及重复功能:{{#addresses}}
。
解析和评估模板的示例代码
let sampleDict : [ String : Any ] = [
"name" : "Chris",
"value" : 10000,
"taxed_value" : Int(10000 - (10000 * 0.4)),
"in_ca" : true,
"addresses" : [
[ "city" : "Cupertino" ]
]
]
var parser = MustacheParser()
let tree = parser.parse(string: template)
let result = tree.render(object: sampleDict)
你明白了。
在 Swift 5 中,你可以将 Mustache 模板公开为常规的 Swift 函数。
声明一个 Mustache 支持的函数
let generateHTMLForWinner = Mustache(
"""
{% raw %}Hello {{name}}
You have just won {{& value}} dollars!
{{#in_ca}}
Well, {{{taxed_value}}} dollars, after taxes.
{{/in_ca}}
{{#addresses}}
Has address in: {{city}}
{{/addresses}}
{{^addresses}}
Has NO addresses
{{/addresses}}{% endraw %}
"""
)
调用该函数
let winners = [
generateHTMLForWinner(
name: "Chris", value: 10000,
taxed_value: 6000, in_ca: true,
addresses: [[ "city": "Cupertino" ]]
),
generateHTMLForWinner(
name: "Michael", value: 6000,
taxed_value: 6000, in_ca: false,
addresses: [[ "city": "Austin" ]]
)
]
请查看我们的 博客 了解更多信息。
mustache 由 The Always Right Institute 和 ZeeZide 提供。 我们喜欢反馈、GitHub 星星、酷的合同工作,大概任何你能想到的赞美形式。 我们不喜欢错误的人。
在 Noze.io Slack 上提问。