看看https://github.com/mutech/aka-ios-beacon。
Re (#1),你使用它很像 XAML 或 HTML 绑定。绑定表达式是在 Interface Builder 中使用可检查属性定义的(您可以在代码中执行此操作,但恕我直言,它违背了 MVVM 的大部分目的)。因此,无需设置或管理 KV 观测值,这已为您透明地(且可靠地)完成。
信标以绑定了解目标及其特定需求的方式扩展大多数视图。您不必担心更新频率。对于复杂的绑定(fe 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,几乎没有任何限制。
您的视图控制器只需提供您在视图的绑定表达式中引用的(键值编码兼容的)属性。