次のように、インデックスが奇数の場合は 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}
常に hello をインスタンス化します。return ステートメントに false をハードコーディングしようとしましたが、結果は変わりません。以前に (より複雑な) カスタム タグを使用したことがあるので、それらが機能することはわかっています。
ご参考までに、タグを使用して、グリッドの行の背景色を交互に変更したいと思います。