Objective-C的替代数据绑定库? (像AngularJS)?

时间:2013-05-24 19:32:39

标签: ios objective-c data-binding angularjs key-value-observing

数据绑定是一个很棒的抽象。我一直在AngularJS中使用它,它使应用程序更简单。我正在尝试编写一个广泛使用数据绑定的iOS应用程序(在这种情况下是游戏),但KVO让我感到悲伤。什么库为objective-c实现了更好的数据绑定?具体来说应该:

  • 有弱引用,因此您不必覆盖dealloc
  • 延迟触发绑定:如果在函数中多次设置属性,则会触发一次
  • 延迟触发绑定:如果你在一个函数中设置多个绑定属性,它会等到所有都被设置为触发之前(所以顺序无关紧要)
  • 更好的语法:不要把所有观察者都粘在一起(需要一个大的if-else)
  • 更好的语法:使用块?

2 个答案:

答案 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,几乎没有任何限制。

您的视图控制器只需提供您在视图的绑定表达式中引用的(键值编码兼容)属性。

相关问题