首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apple Swift对循环上下文的错误规则

Apple Swift对循环上下文的错误规则
EN

Stack Overflow用户
提问于 2022-04-26 12:48:16
回答 1查看 63关注 0票数 3

在MacOS上使用SWIFT5.6,并为断断续续的规则提供以下Swift代码:

代码语言:javascript
复制
class Car //AB
{
    class Foo //AD
    {
        func Foo() -> Void //AD
        {
               
        }
    }
}

Foo的错误名称是_$s4TEST3CarC3FooCADyyF (目标名称TEST),我不明白为什么给Foo索引代码AD,我希望分配AC

代码语言:javascript
复制
AA   AB  AC 
TEST.Car.Foo.Foo

在另一个例子中:

代码语言:javascript
复制
class TEST //AA
{
    class Car //AC
    {
        class Foo //AE
        {
            class Car //AC
            {
                func Foo() -> Void //AE
                {
                    
                }
            }
        }
    }
}

错误的名称是_$s4TESTAAC3CarC3FooCACCAEyyF,同样,这些是我要分配的值:

代码语言:javascript
复制
AA        AB  AC
TEST.TEST.Car.Foo.Car.Foo

为什么在第一个长形式编码Foo之后将AE分配给3Foo?为什么跳过ABAD而不使用?请注意,这仅适用于字符串中的经常性项,如果没有重复项,我可以愉快地进行编码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 21:59:57

在第一种情况下,替代指数分配如下:

代码语言:javascript
复制
AA TEST
AB Car
AC TEST.Car
AD Foo
AE TEST.Car.Foo

您可以通过使用这个问题中的demangling代码来获得这些结果。方法的破损名称,只是没有F后缀-这是允许我们添加任何A替代我们的选择到末尾。(我还删除了yy以减少输出中的噪声)

代码语言:javascript
复制
print(swift_demangle("$s4TEST3CarC3FooCAdA")!)
print(swift_demangle("$s4TEST3CarC3FooCAdB")!)
print(swift_demangle("$s4TEST3CarC3FooCAdC")!)
print(swift_demangle("$s4TEST3CarC3FooCAdD")!)
print(swift_demangle("$s4TEST3CarC3FooCAdE")!)
/*
TEST.Car.FooFooTEST
TEST.Car.FooFooCar
TEST.Car.FooFooTEST.Car
TEST.Car.FooFooFoo
TEST.Car.FooFooTEST.Car.Foo
*/

因此,当损坏的算法破坏Car时,它也会“记住”替代TEST.Car (因为它可能是一种名义类型),而不仅仅是Car本身。无论以后是否使用替换,都会发生这种情况,这可能是为了使查询更容易(?)

当您将代码更改为:

代码语言:javascript
复制
class Car
{
    class Foo
    {
        func Foo() -> Car
        {
            fatalError("")
        }
    }
}

现在,Foo的错误名称是$s6output3CarC3FooCAdCyF,它使用了AC

作为一种心理模型,您可以将其看作是与破损名称中的字母C以及<number><identifier>部件相关联的替换索引,如下所示:

代码语言:javascript
复制
$s4TEST3CarC3FooCADyyF
   ^     ^ ^  ^ ^
   |     | |  | |
  AA     ABAC ADAE

在第二种情况下也会发生类似的情况。ABTEST.TESTADTEST.TEST.Car

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72014250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档