xcode 14 警告:无法在 deinitializer 中访问属性“Some_name”;这是 Swift 6 中的错误

在我的项目中导入 IQKeyboardManager 库时,升级到 XCode 14 后,我在一些导入的类中收到以下警告:

enter image description here 复制“self”后,只能从 deinit 访问“self”的非隔离属性。

我在大多数类的 deinit 中都收到此警告,我在其他一些第三方库类中也收到此警告。我理解它的含义,但是解决方法应该是什么?任何可以让我们获得解决此问题的想法的来源?

stack overflow xcode 14 warning: Cannot access property 'Some_name' here in deinitializer; this is an error in Swift 6
原文答案
author avatar

接受的答案

在您的屏幕截图中,我可以看到您在项目中使用 IQKeyboardManager 库。警告不是关于您的代码,而是关于您导入的 IQKeyboardManager 代码。

更多上下文:快速语言正在改变允许和不允许的内容。这个具体问题正在 Swift forum 上讨论。根据讨论的结果,IQKeyboardManager 团队可能需要也可能不需要更改代码。

目前,如果您忽略警告,我认为没有问题。将来,该问题可能会由 Swift 团队或 IQKeyboardManager 团队为您解决。

我还在 IQKeyboardManager github 上提交了一个问题。


答案:

作者头像

应该有什么解决方法?

您不需要在 nil 中为 deinit 设置任何内容,因为在那之后,内存将被释放,并且所有实例变量都将在此之前“释放”(使用 Objective-C 术语)发生。

您的整个 deinit 是多余的,可以删除。 Swift 中的 deinit 是清理不由 Swift 管理的资源所必需的 only ,例如,如果您的对象包装了需要关闭的 Unix 文件描述符。