动态select属性用RAC观察

Dynamically select property to observe with RAC

我在一个视图中有很多 UISegmentedControl(实际上是 74 个),我想使用 RACChannel 与它们各自的模型属性进行双向绑定。为了减少代码,我想在运行时使用 IBOutletCollection 的枚举分配这些绑定。

为了完成这项工作,我必须想出一种动态 select 正确 属性 的方法。我的模型有 74 个属性遵循以下命名约定:"item1a, item1b, item1c, item2a...".

在每个 UISegmentedControl 上我都有一个属性 "name",我可以在运行时提取该属性以了解应该将哪个控件绑定到哪个 属性。

本质上我想做的是

RACCHannelTerminal *modelTerminal = RACChannelTo(self, "DYNAMIC PROPERTY NAME");

我可以通过

获取动态 属性 名称的值
[self valueForKey:@"item1a"];

但这并没有给出要观察的实际 属性,只是一个值。

有什么方法可以做到所描述的吗?

来自文档 - RACChanelTo - 只是一个宏,您可以将其重写为

[[RACKVOChannel alloc] initWithTarget:<#(NSObject *)#> keyPath:<#(NSString *)#> nilValue:<#(id)#>]

所以,不要使用 RACChanelTo(,),而是使用

RACCHannelTerminal *modelTerminal = [[RACKVOChannel alloc] initWithTarget:self keyPath:@"DYNAMIC PROPERTY NAME" nilValue:nil];

警告

来自反应式 Cocoa header

/// Do not use this directly. Use the RACChannelTo macro above.

define RACChannelTo_(TARGET, KEYPATH, NILVALUE) \

[[RACKVOChannel alloc] initWithTarget:(TARGET) keyPath:@keypath(TARGET, KEYPATH)

nilValue:(NILVALUE)][@keypath(RACKVOChannel.new, followingTerminal)]

希望对您有所帮助