【发布时间】:2014-08-14 05:06:09
【问题描述】:
IBOutlets 在 Swift 中默认是弱的。我在 viewController 中有一个对象在情节提要中创建,它不在视图层次结构中,所以我需要它成为 ViewController 中的强引用,我该如何更改 @IBoutlet 属性变强。
【问题讨论】:
IBOutlets 在 Swift 中默认是弱的。我在 viewController 中有一个对象在情节提要中创建,它不在视图层次结构中,所以我需要它成为 ViewController 中的强引用,我该如何更改 @IBoutlet 属性变强。
【问题讨论】:
更改插座的名称,它可能是保留名称,因此您试图覆盖它。
【讨论】:
该错误的另一个原因是因为一个愚蠢的错误。例如,当我在视图控制器中初始化一个名为“imageView”的 UIImageView 对象时,发生了一个名为“无法用弱属性覆盖强属性”的错误。 但是当我更改对象名称例如“pictureView”时,错误就消失了。 最好的问候...
【讨论】:
它现在是从下拉菜单创建插座时的一个选项。
这就是为什么我们可能希望从 WWDC 2015 Session 407 开始让它们变得强大
http://asciiwwdc.com/2015/sessions/407
我要指出的最后一个选项是存储类型,它可以 要么强要么弱。
一般来说,你应该让你的出口强大,尤其是如果你是 将出口连接到子视图或非约束 总是会被视图层次结构保留。
你真正需要让出口变弱的唯一情况是,如果你有一个 引用某些内容的自定义视图备份视图层次结构和 一般不建议这样做。
所以我要选择 strong 并且我会点击 connect 这将 生成我的出口。
【讨论】:
您可以在连接插座时通过选择strong 来创建IBOutlet strong:
或者只是从声明中删除 weak 关键字:
@IBOutlet var label: UILabel!
【讨论】:
strong 关键字再次消失,并在 Xcode 6.1.1 中引发语法错误。默认情况下,现在的网点似乎很强大,而以前恰恰相反。因此,只需定义出口,无需额外声明。
@IBOutlet var nameOfOutlet: type = Whatever();
【讨论】:
从 Xcode 6 beta 3 开始,Swift 现在允许将 @IBOutlets 标记为 strong。
• @IBOutlets 可以显式标记为强以覆盖它们的 隐含的弱行为。 (16954464)
【讨论】:
从 Xcode 6 beta 2 开始,Swift 没有办法指定强大的出口。解决方法是在 IB 中连接插座,然后从源文件中删除 @IBOutlet 属性。
更新:这已添加到 Xcode 6 beta 3 中。
【讨论】: