如何使用不同的变量名在swift中调用模具?

如何使用不同的变量名在swift中调用模具?,swift,swift-stencil,Swift,Swift Stencil,我有两个模具模板,除了变量名不同外,几乎相同: 模板#1 模板#2 我想如果我能把它重构成一个模板,让模板1和模板2调用这个新模板,它会更干净 {% if ??.property1 = "abc" %} // same logic as template 1 {% endif %} 但问题是在模板1中,变量是p,而在模板2中,变量是a。 那么,如何使用不同变量名的template#1和#2调用新模板呢?这正是标记的用例。使用此标记,您可以包含另一个模板的内容

我有两个模具模板,除了变量名不同外,几乎相同:

模板#1

模板#2

我想如果我能把它重构成一个模板,让模板1和模板2调用这个新模板,它会更干净

  {% if ??.property1 = "abc" %}
    // same logic as template 1
  {% endif %}
但问题是在模板1中,变量是
p
,而在模板2中,变量是
a

那么,如何使用不同变量名的template#1和#2调用新模板呢?

这正是标记的用例。使用此标记,您可以包含另一个模板的内容,还可以将您选择的上下文传递给它

某些逻辑
移动到单独的模板。让我们调用该文件
一些logic.stencil
。在这里,无论您在哪里使用了
p.propertyX
,您都应该将其更改为仅
propertyX
,因为您将
p
/
a
作为上下文

一些logic.stencil:

{% if property1 = "abc" %}
    {# same logic as template 1, except all the "p." are deleted. #}
{% endif %}
在模板#1中,执行以下操作:

在模板2中,执行以下操作:


模具中的注释标记为
{#…#}
,而不是
/
。我尝试了上面的解决方案。但它对我不起作用,它似乎无法在某些逻辑中解析'property1'。尽管我将'p'作为上下文传递。
  {% if ??.property1 = "abc" %}
    // same logic as template 1
  {% endif %}
{% if property1 = "abc" %}
    {# same logic as template 1, except all the "p." are deleted. #}
{% endif %}
{% for p in anArray %}
    {% include "some logic.stencil" p %} {# passing "p" as the context #}
{% endfor %}
{% for a in aDifferentNameArray %}
    {% include "some logic.stencil" a %} {# passing "a" as the context #}
{% endfor %}