动态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)]
希望对您有所帮助
我在一个视图中有很多 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)]
希望对您有所帮助