我应该在Swift中使用Cocoa Bindings吗?

问题描述:

我不太确定Cocoa Bindings和IBOutlets/IBActions之间的根本区别。我目前正在将一个Obj-C项目移植到Swift 3,我想知道是否使用绑定是常见的做法,特别是在Swift中?关于一般绑定的社区讨论很少,我是Cocoa/CocoaTouch开发新手的CS学生,所以我会很感激冗长的答案。我应该在Swift中使用Cocoa Bindings吗?

+0

在OS X上,Cocoa Bindings在Swift中与ObjC中的一样。对于iOS,请勿使用绑定与UIKit控件,因为[它们不符合KVO](https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/KVO.html) –

+0

@ CodeDifferent即使在OS X上,在视图上绑定通常也是可能的,而且很少有用,但在视图上绑定是反晕的。 –

+1

@ AminNegm-Awad我发现绑定非常有用,并减少了很多代码,特别是当应用程序数据密集时。当它起作用时,它看起来很神奇。诀窍在于纠正错误,因为错误的绑定很难调试。没有任何关于它的反义词 –

首先Cocoa Touch不支持Cocoa绑定,但只能由Cocoa支持。由于软件开发的重点放在移动设备上,可可绑定变得不那么出名了。但是,您可以在键值观察之上实现绑定。问题是,它是否值得。重要的是关键价值观察。

另外Cocoa绑定是一个反应式编程的实现。在移动平台上,这样做的压力比在桌面上要少,因为UI是“更多模式”。

与Swift相比,如果没有特殊的语言特性和Objective-C的动态运行时环境,就不可能实现KVO和Cocoa绑定。在运行时创建类,选择器从字符串等构建。所有动态的东西斯威夫特讨厌,并试图使不必要的。所以你可以称它为“unswifty”。然而,它是可可的生活的一部分,除了意识形态的原因,我没有看到,为什么你应该放弃它。

+0

我注意到的一个问题是如果你只有一个Swift背景,关键路径可能不是你所期望的。例如。 'NSSpplitViewItem'的Swift接口显示它有一个布尔型属性'isCollapsed'。但是用它作为关键路径是行不通的。实际的关键路径是“目标C”,“折叠” – Alexander