数据绑定是一个很棒的抽象。我一直在AngularJS中使用它,它使应用程序更简单。我正在尝试编写一个广泛使用数据绑定的iOS应用程序(在这种情况下是游戏),但KVO让我感到悲伤。什么库为objective-c实现了更好的数据绑定?具体来说应该:
答案 0 :(得分:3)
Reactive Cocoa看起来很神奇:https://github.com/blog/1107-reactivecocoa-for-a-better-world
我没有尝试过足以判断它是否满足#2和#3,但我希望如此。
答案 1 :(得分:0)
看看https://github.com/mutech/aka-ios-beacon。
Re(#1),您使用它就像XAML或HTML绑定一样。绑定表达式在Interface Builder中使用可检查属性定义(您可以在代码中执行此操作,但恕我直言,它会破坏MVVM的大部分用途)。因此,无需设置或管理KV观察,这是透明地(并且可靠地)为您完成的。
Beacon扩展了大多数视图,使绑定了解目标及其特定需求。您不必担心更新频率。对于复杂绑定(例如TableView数据源),视觉更新通常以动画平滑且避免不必要的工作的方式推迟。同样,在大多数情况下(如果不是全部情况),这对您来说是透明的不确定这是否真的能回答#2和#3。
更好的语法:您可以通过在界面构建器属性中定义绑定表达式来设置绑定。例如,UILabel文本绑定的简单绑定表达式可以是:
currentPerson.name
更复杂的绑定,对于标签也可能如下所示:
account.amount { numberFormatter: { numberStyle: $enum.CurrencyStyle } }
表视图数据源的一个非常复杂的绑定就像是这样:
[
arrayForFirstSection { headerTitle: "First Section" },
fetchedResultsForSecondSection { headerTitle: "Second Section" }
] {
cellMapping: { [
{ predicate: <MyModelClass1>, cellIdentifier: "Model1Cell" },
{ predicate: "SELF < $value" { value: 0 }, cellIdentifier: "NegativeNumberCell"}
] }
}
如果这看起来很可怕,请注意,这是连接表格视图所需要做的全部工作。 UITableViewDataSource和UITableViewDelegate由绑定实现。但是,您仍然可以提供委托方法并调整tableview,几乎没有任何限制。
您的视图控制器只需提供您在视图的绑定表达式中引用的(键值编码兼容)属性。