Xcode 13.3 神奇地将函数调用更改为 属性 访问

Xcode 13.3 magically changing a function call into a property access

一夜之间,我的 Xcode 更新到了 13.3。从那以后,我在编译时遇到错误。

我有一个方法,现在叫做xxxxasdfxxxx()。它出现在 if 语句的最后一行。例如:

       if  let state = ...,
            let field = state....,
            !field.xxxxasdfxxxx()
        {
        }

每当我编译时,代码都会神奇地从一个方法变为 属性。所以上面的代码突然看起来像:

        if  let state = ...,
            let field = state....,
            !field.xxxxasdfxxxx {

请注意,它甚至还移动了左大括号。我不知道这是否相关。

这是一个重大变化,我不知道为什么要这样做。显然函数的名字并不重要,因为我已经改了好几次了。有趣的是,我在项目的另一部分有一段相同的代码没有被神奇地改变。

有没有人知道为什么会发生这种情况以及如何解决它?

我在使用 Xcode 13.3 时遇到了同样的问题,我不知道是什么原因造成的。但我找到了一个适合我的解决方案,并且可以在没有更多问题的情况下构建应用程序。

只需从 de 方法的调用中删除 ! 并使用 == false 代替,如下所示:

            if  let state = ...,
            let field = state....,
            field.xxxxasdfxxxx == false {

这似乎也发生在我身上。设置值 == false 似乎有效,但我们有太多实例需要更改。看了之后,似乎是我们的 SwiftLint 实例。果然,将 SwiftLint 更新到最新版本 (0.47.0) 解决了这个问题。如果您安装了 linter,我建议您仔细检查一下。

我在 Xcode 13.4 中遇到了同样的问题,我使用此命令行更新 SwiftLint 解决了它:brew upgrade swiftlint