Mustache

Swift4 Swift5 macOS tuxOS Build and Test

一个简单的 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 动态可调用

在 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" ]]
    )
]

请查看我们的 博客 了解更多信息。

mustacheThe Always Right InstituteZeeZide 提供。 我们喜欢反馈、GitHub 星星、酷的合同工作,大概任何你能想到的赞美形式。 我们不喜欢错误的人。

Noze.io Slack 上提问。