斯威夫特使IBOutlet变得强大

时间:2014-06-24 04:00:29

标签: ios macos swift

默认情况下,IBOutlets在Swift中很弱。我在故事板中创建的 viewController 中有一个对象,它不在视图层次结构中,所以我需要它在 ViewController 中作为强引用,我该如何更改< strong> @IBoutlet 属性强。

7 个答案:

答案 0 :(得分:26)

您可以在连接插座时选择IBOutlet来制作strong strongenter image description here

或者只是从声明中删除weak关键字:

@IBOutlet var label: UILabel!

答案 1 :(得分:7)

从Xcode 6 beta 2开始,Swift没有办法指定强大的渠道。解决方法是连接IB中的插座,然后从源文件中删除@IBOutlet属性。

更新:已在Xcode 6 beta 3中添加。

答案 2 :(得分:4)

现在可以选择从下拉列表中创建插座。

这就是为什么我们可能希望从WWDC 2015 Session 407开始强化它们

http://asciiwwdc.com/2015/sessions/407

  

我想指出的最后一个选项是存储类型,可以   无论是强者还是弱者。

     

一般情况下,你应该让自己的出路变得强大,特别是如果你的话   将插座连接到子视图或不连接的约束   总是会被视图层次结构保留。

     

你真正需要做出一个弱点的唯一一次就是你有一个   自定义视图引用视图层次结构的备份和   一般情况下不推荐。

     

所以我要选择强,我会点击连接   生成我的插座。

答案 3 :(得分:4)

更改插座的名称,它可能是一个保留名称,因此您试图覆盖它。

答案 4 :(得分:2)

strong关键字再次消失,并在Xcode 6.1.1中引发语法错误。看起来默认情况下,网点现在很强大,而之前则相反。因此,只需定义没有附加声明的插座。

@IBOutlet var nameOfOutlet: type = Whatever();

答案 5 :(得分:2)

该错误的另一个原因是因为一个愚蠢的错误。例如,当我在视图控制器中初始化一个名为“ imageView”的UIImageView对象时,发生了一个错误“无法用弱属性覆盖强属性”。 但是,当我更改对象名称(例如“ pictureView”)时,错误消失了。 最好的问候...

答案 6 :(得分:1)

从Xcode 6 beta 3开始,Swift现在允许将@IBOutlets标记为strong

来自release notes

  

•@ IBOutlets可以明确标记为强,以覆盖它们   隐含弱行为。 (16954464)