获取 Swift 成员宏中类型注释的原始字符串文字

问题描述 投票:0回答:1

背景

考虑这个类,用宏装饰:

@Blah
final class Foo
{
   var title: String = ""
   var count: Int = 0
}

@Blah
宏的实现中,我想检查每个成员属性的
TypeSyntax
并进行比较。像这样:

static func expansion(of node: AttributeSyntax, providingMembersOf declaration: some DeclGroupSyntax, in context: some MacroExpansionContext) throws -> [DeclSyntax]
{
    for member in declaration.memberBlock.members
    {
        guard let type: TypeSyntax = member.decl.as(VariableDeclSyntax.self)?.bindings.first?.typeAnnotation?.type else {
           continue
        }

        // Pseudo code:
        if type.literalStringTokenValue == "String"
        {
          ...
        }
        else if type.literalStringTokenValue == "Int"
        { 
           ...
        }
    }
}

我知道宏无法处理具有隐含类型的属性声明,但在这种情况下,类型注释is在那里,我只需要它的文字字符串值,以便我可以决定如何继续。

我尝试过使用

.as()
进行转换,但收到了一堆弃用警告。正确的做法是什么?

swift swift-macro
1个回答
0
投票

就是这个:

if type.as(IdentifierTypeSyntax.self)?.name.text == "String"
{

}

我在最初的尝试中只是抓住了错误的语法类型。这个网站对于编写 Swift 宏非常有用,并帮助我发现了错误:https://swift-ast-explorer.com

© www.soinside.com 2019 - 2024. All rights reserved.