You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift宏生成带关联值枚举时关联值间缺少逗号的解决方法

Swift宏生成带关联值枚举时关联值间缺少逗号的解决方法

嘿,这个问题我碰到过!你现在的问题是用Swift宏生成带关联值的枚举时,关联值之间少了逗号导致编译失败对吧?其实这是因为Swift Syntax库在构建参数列表这类节点的时候,不会自动帮你添加元素之间的分隔符,得咱们手动指定才行。

你看,原来的代码里直接把EnumCaseParameterSyntax的数组传给EnumCaseParameterListSyntax,但这个列表类型需要显式声明元素之间的分隔符(也就是逗号)。如果不指定,生成的代码里就不会出现逗号。

解决方法很简单,在初始化EnumCaseParameterListSyntax的时候,多传一个separator参数,指定为.commaToken()就可以了。修改后的完整代码如下:

public enum MyMacro: PeerMacro {

    public static func expansion(
        of _: AttributeSyntax,
        providingPeersOf _: some DeclSyntaxProtocol,
        in _: some MacroExpansionContext
    ) throws -> [DeclSyntax] {
        [
            DeclSyntax(
                EnumDeclSyntax(name: "MyEnum") {
                    EnumCaseDeclSyntax {
                        EnumCaseElementSyntax(
                            name: "myCase",
                            parameterClause: EnumCaseParameterClauseSyntax(
                                parameters: EnumCaseParameterListSyntax(
                                    [
                                        EnumCaseParameterSyntax(type: TypeSyntax("Int")),
                                        EnumCaseParameterSyntax(type: TypeSyntax("String"))
                                    ],
                                    separator: .commaToken()
                                )
                            )
                        )
                    }
                }
            )
        ]
    }
}

这样修改之后,生成的代码就会自动在关联值之间加上逗号了,编译就能正常通过:

enum MyEnum {
    case myCase(Int, String)
}

备注:内容来源于stack exchange,提问作者Daniel Amarante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:58:13