我正在阅读: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/