当前位置: 首页 > 面试题库 >

为什么关键字“弱”仅适用于类和类绑定的协议类型

公孙盛
2023-03-14
问题内容

当我weak在Swift中声明变量时,有时会从Xcode收到错误消息:

“弱”仅可应用于类和类绑定协议类型

我只是想知道为什么关键字weak只能应用于类和类绑定的协议类型?背后的原因是什么?


问题答案:

weak是引用类型的限定符(与structs和内置值类型等值类型相反)。

引用类型使您可以对同一对象有多个引用。当最后一个强引用停止引用该对象时,该对象将被释放(弱引用不计算在内)。

另一方面,值类型是按副本分配的。引用计数不适用,因此weak修饰符对它们没有意义。



 类似资料:
  • 问题内容: 我对一方面用于协议的关联类型的语法和另一方面用于泛型类型的语法之间的区别感到困惑。 例如,在Swift中,可以使用以下方式定义通用类型 而使用诸如 为什么后者不只是: 是否有某种深层的原因(或者也许是显而易见的,对我来说就迷失了),原因是该语言未采用后一种语法? 问题答案: 在开发人员列表中已对此进行了多次讨论。基本答案是关联类型比类型参数更灵活。虽然您在这里有一个类型参数的特定情况,

  • 问题内容: 我试图弄清楚如何为通用类(在Swift中)实现类型约束,它将通用类型限制为仅数字类型。例如Double,Int等,但不是字符串。谢谢你的帮助。 问题答案: 您可以使用尖括号为通用类(对函数使用相同的语法)指定类型约束(使用类和协议): 要在单个类型上指定多个需求,请使用子句: 但是,您似乎无法在泛型参数子句中指定可选要求,因此一种可行的解决方案是创建一个协议,使所有数字类型都通过扩展来

  • 我正在尝试创建一个通用类型安全方法来逐行获取一些字段,如下所示: 虽然它工作正常,但问题是我不能在这里提供字段类型作为第二个泛型参数: 因为它只知道字段本身,所以可能会导致堆污染问题。 我很乐意将我的签名改为: 但是只接受其类型作为泛型参数,而不是记录类型。 在JOOQ代码库中,字段类是否有绑定到其记录类型的子/父类? 谢谢

  • 问题内容: 说,我有一种方法: 然后在尝试编译此代码时: 我得到一个错误。谁能解释为什么类型系统不能推断Collections.emptyList()应该是类型吗? 上面的示例显然是很人为的,但是我一直都在偶然地遇到这种限制,这确实很烦人。阅读了 Effective Java 之后,我发现您可以轻松地完成工作(必须说,当时对我来说是一个启示),并且一切都可以顺利编译,但是当您使用复杂的类型时,确实

  • 问题内容: 您能否澄清一下,为什么在我们将 final 关键字设为不变时,为什么 在上课之前需要 final 关键字。我的意思是,如果我们将所有属性声明为私有和最终的,那么它也是一个不可变的类,不是吗? 很抱歉,这个问题似乎很简单,但是我对此感到非常困惑。帮帮我。 编辑:我知道一个声明为final的类不能被子类化。但是如果每个属性都是私有和final的,那有什么区别呢? 问题答案: 正如堆纸器所说

  • 公共类JavaApplication1{ } 在这里,JavaApp1不是子类,它包含一个超级关键字,那么它意味着什么呢?