Objective-c KVC : Collection Accessor Patterns for To-Many Properties, 我如何使用它来增强我的代码?

标签 objective-c cocoa key-value-coding

我正在阅读:Collection Accessor Patterns for To-Many Properties ,但我不确定我可以或应该在哪里使用它。 有人可以指出一些我可以使用 To-Many Properties 的集合访问器模式 来改进我的代码或使我的代码编写更容易的场景吗?

最佳答案

您正在阅读的集合访问器模式改进了键值编码与 NSArray、NSDictionary 等集合一起工作的方式。如果您在自己的类中实现它们,您的类可以与 KVC 一起使用,就像标准集合类一样.例如,您可能有一个包含 Passenger 列表的 Flight 类。但也许这些乘客没有存储在 NSArray 中,而是从数据库或其他东西中提取的。如果您实现以下方法:

  • -countOfPassengers
  • -passengersAtIndexes:
  • -getPassengers:range:

然后使用您的类的代码可以使用 KVC 有效地访问乘客列表。例如,您可能会得到一个乘客飞行常客号码列表(假设 Passenger 具有这样的属性),如下所示:

NSArray *frequentFlyerNumbers = someFlight.passengers.frequentFlyerNumbers;

这是非常方便的东西 - 使您不必遍历集合并自己收集所有这些数字。如果你不知道你可以用像 NSArray 这样的标准集合来做到这一点,这可能看起来令人惊讶,所以先花点时间理解这部分,然后考虑通过实现一些简单的方法你已经做了同样的事情你自己的 Flight 类。很酷的是,即使乘客的存储完全在您的类(class)内部,这仍然有效。

现在,上面的方法只涵盖了 getter,但你可以通过实现对 setter 做同样的事情:

  • -insertPassengers:atIndexes:
  • -removePassengersAtIndexes:
  • -replacePassengersAtIndexes:withPassengers:

现在,您的代码可以再次使用 KVC 在航类中添加和删除乘客:

[someFlight replacePassengersAtIndexes:bumpedPassengerIndexes 
                        withPassengers:passengersFromLateConnectingFlight];

您也可以实现其他 KVC 访问器,但我认为我不需要为您列出所有这些访问器,因为它们就在您链接的文章中。关键是键值编码是有用的东西,在许多地方都有使用,通过实现少量方法,您可以使您自己的类符合 KVC。

关于Objective-c KVC : Collection Accessor Patterns for To-Many Properties, 我如何使用它来增强我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387553/

相关文章:

cocoa - Cocoa (Mac) 中的 HitTest 文本?

objective-c - FRFeedbackReporter.sh 脚本工作时出现问题

objective-c - 点语法和 valueForKey 之间的区别

objective-c - 嵌入式 NSArray 中第一个元素的键路径

objective-c - 如何从 NSString 中删除/替换/显示 unicode 字符

objective-c - 如何从 NSCollectionView 中删除所有项目?

objective-c - 是否可以将 `NSTextfield` 仅绑定(bind)到 NSArray 或 NSSet/Relationship 中的一个特定条目

objective-c - 当值改变时 KVO 不触发

iphone - 获取节点 :withName: method of soap is called more than 2 million times when parsing some big xml web service

ios - 使 UILabel 的文本加粗