我是ReactiveCocoa和Objective-C的新手。我看到在下面的代码中有_subscribeCommand
的用法,但是没有声明它的地方。它与subscribeCommand
方法一致。这是一个局部变量吗?
- (RACCommand *)subscribeCommand {
if (!_subscribeCommand) {
NSString *email = self.email;
_subscribeCommand = [[RACCommand alloc] initWithEnabled:self.emailValidSignal signalBlock:^RACSignal *(id input) {
return [SubscribeViewModel postEmail:email];
}];
}
return _subscribeCommand;
}
本教程中找到了完整的代码 http://codeblog.shape.dk/blog/2013/12/05/reactivecocoa-essentials-understanding-and-using-raccommand/
答案 0 :(得分:2)
在类上创建属性时,Objective-C将创建一个实例变量,其名称与属性相同,但带有下划线前缀。在链接到的教程中,有一个subscribeCommand
属性:
@property(nonatomic, strong) RACCommand *subscribeCommand;
在课程中,您可以使用self.subscribeCommand
使用getter / setter访问此属性,或使用_subscribeCommand
直接访问该变量。
如果直接访问实例变量,则绕过getter / setter,无论是类中的显式getter / setter还是强制执行属性属性的隐含getter / setter(nonatomic
,strong
等)。
在您链接到的示例中,subscribeCommand
方法是subscribeCommand
属性的显式getter。没有setSubscribeCommand
方法,因此将使用默认的setter(这将强制执行属性的strong
和nonatomic
属性。)