【问题标题】:What's the difference in Swift between unowned vs weak but implicitly unwrapped?在 Swift 中 unowned 与 weak 但隐式展开之间有什么区别?
【发布时间】:2020-10-13 05:49:54
【问题描述】:
weak var cat: Cat!

unowned var cat: Cat

我刚开始了解这个话题,但这真的让我很困惑,在正常设置中使用弱但隐式展开的变量有什么好处,除了 UI 的东西?

【问题讨论】:

  • Unowned 只是描述了引用的逻辑——“与弱引用不同,无主引用应该总是有一个值。因此,将值标记为无主不会使其成为可选的,并且ARC 从不将无主引用的值设置为 nil。” docs.swift.org/swift-book/LanguageGuide/…
  • 这在 Swift 文档中有很好的描述:docs.swift.org/swift-book/LanguageGuide/…
  • @BenSinclair 我经历过,但我没有看到“弱隐式展开可选”的示例
  • @Bruce weak 和隐式展开是互斥的;因为weak 可以转nil。无论哪种方式,如果您保证变量的生命周期,那么您最好使用unowned
  • 是的,我也这么认为,但我在我正在处理的当前代码库中看到了它们。所以如果你说的是真的,基本上两者都是一样的,但是如果我们保证它永远不会是 nil 我们应该使用 unowned,那么使用弱 IUO 是没有意义的。所以对我来说,弱 IUO 和无主是一回事,但无主使意图更清晰。

标签: ios swift weak-references


【解决方案1】:
  1. 您仍然可以检查 IUO 以查看它是否为零,即使您不必这样做。
  2. 您必须为unowned var 提供一个不只是none 的初始值。如果初始值在获得“真实”值之前只是一个占位符,则这不如none 有意义。

【讨论】:

    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2023-02-17
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多