Пользовательский тег Vapor/Leaf не возвращает правильное значение

Я зарегистрировал пользовательский тег для возврата true, если индекс нечетный, и false, если даже так:

class OddEvenTag: BasicTag {
    let name = "OddEven"

    func run(arguments: ArgumentList) throws -> Node? {
        guard
            arguments.count == 1,
            let index = arguments[0]?.int
            else { return Node(nil) }
        print(index, index & 1)
        return Node((index & 1) == 1)
    }
}

Оператор print выдает удовлетворительно хороший результат:

0 0
1 1
2 0
3 1
...

Однако, когда я использую пользовательский тег внутри #loop в листовом файле, например

#OddEven(offset){hello}##else(){bye}

Это всегда создает привет. Я попытался жестко запрограммировать false в операторе return, и это не меняет результат. Я использовал (более сложный) пользовательский тег раньше, поэтому я знаю, что они могут работать.

Если вам интересно, я действительно хочу использовать тег, чтобы чередовать цвета фона строки сетки!

1 ответ

Решение

BasicTag можно использовать только так:

#TagName(variable)

и возвращает значение.

Если вы хотите условно визуализировать следующий блок следующим образом:

#TagName(variable) { show if true }

тогда вам нужно продлить Tagи вставьте свой код показа / скрытия в shouldRender(tagTemplate:arguments:value:) функция.

В качестве отправной точки, посмотрите на If тег, но вместо проверки на истинные значения, проверьте четные значения.

Другие вопросы по тегам