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
相关产品推荐
相关产品推荐

