Ios 为什么可以';在Xcode 12中重写isEqual(uObject:)吗?

Ios 为什么可以';在Xcode 12中重写isEqual(uObject:)吗?,ios,objective-c,swift,xcode,Ios,Objective C,Swift,Xcode,我使用的是一个最初用Swift编写的类,它从第三方框架扩展了NSObject: open class ExampleClass: NSObject, Codable { ... } 由于这是一个第三方类,我无法修改原始类,因此我在其上创建了一个扩展来覆盖isEqual(uuObject:): 目前在Xcode 11上编译和构建的很好,但是在Xcode 12上有相同的分支,我得到了一个错误,即“ExampleClass”子类扩展中的“@objc”实例方法需要iOS 13.0.0 我发现了一个似乎

我使用的是一个最初用Swift编写的类,它从第三方框架扩展了
NSObject

open class ExampleClass: NSObject, Codable { ... }
由于这是一个第三方类,我无法修改原始类,因此我在其上创建了一个扩展来覆盖
isEqual(uuObject:)

目前在Xcode 11上编译和构建的很好,但是在Xcode 12上有相同的分支,我得到了一个错误,即“ExampleClass”子类扩展中的“@objc”实例方法需要iOS 13.0.0


我发现了一个似乎意味着功能不能在Swift扩展中被覆盖的问题,但我试图了解从Xcode 11迁移到12后发生了什么变化。最近是否有什么改变阻止了这种情况的发生?有没有想过要解决这个问题?

不久前在Swift中禁止覆盖扩展中的方法,不知道为什么它在Xcode 11中适用。可能是因为该类是Objective-C,并且是另一个框架的一部分,Swift编译器不应该让您这样做。关于在扩展中重写的非常有用的详细信息:谢谢您的参考!是的,显然我们不能覆盖扩展中的方法,这让我很惊讶它以前是如何在以前版本的Xcode上编译的。我最终解决了这个问题,将函数定义为它自己的东西,而不是重写它,尽管这并不理想。在扩展中重写方法不久前在Swift中被禁止,我不知道为什么它在Xcode 11中对您有效。可能是因为该类是Objective-C,并且是另一个框架的一部分,Swift编译器不应该让您这样做。关于在扩展中重写的非常有用的详细信息:谢谢您的参考!是的,显然我们不能覆盖扩展中的方法,这让我很惊讶它以前是如何在以前版本的Xcode上编译的。最后,我将函数定义为它自己的东西,而不是覆盖它,尽管这并不理想。
extension ExampleClass {
    override open func isEqual(_ object: Any?) -> Bool {
        return true
    }
}