gpt4 book ai didi

swift - 为什么我可以将 @objc 协议(protocol)声明为弱属性,而不是 swift 协议(protocol)?

转载 作者:搜寻专家 更新时间:2023-10-31 08:31:57 27 4
gpt4 key购买 nike

我发现如果我创建一个这样的协议(protocol):

protocol MyProtocol { }

我不能这样做:

weak var myVar: MyProtocol?

我找到了解决这个问题的方法,就是将 @objc 添加到协议(protocol)声明中:

@objc protocol MyProtocol { }

但是为什么这样可以修复错误呢?

我的猜测是添加 @objc 会阻止结构符合协议(protocol),因此变量的值被保证为引用类型。我说得对吗?

此外,添加 @objc 会阻止我添加像 [String: Any] 这样的 swift 类型。我也想知道是否有另一种修复错误的方法。

最佳答案

只能为引用类型创建弱引用,即实例类的,不适用于值类型(结构或枚举)。

如果您将协议(protocol)声明为“仅限类的协议(protocol)”

protocol MyProtocol : class { }

然后您可以声明该类型的弱变量:

weak var myVar: MyProtocol?

在你的情况下

@objc protocol MyProtocol { }

声明一个只能被 NSObject 子类采用的协议(protocol)或其他 @objc 类,因此这是一个隐含的类协议(protocol)。

关于swift - 为什么我可以将 @objc 协议(protocol)声明为弱属性,而不是 swift 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39484289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com