direct修饰的变量可以使用rac吗
时间: 2023-10-28 18:04:34 浏览: 45
`direct` 修饰的变量可以使用 RAC,但需要注意一些细节。
由于 `direct` 是一个实例变量,而不是 `@property`,因此不能使用 `RAC` 提供的默认的 `@synthesize` 指令来自动生成访问器方法。如果想在 `RAC` 中使用 `direct` 变量,需要手动实现访问器方法。
下面是一个示例代码:
```objective-c
@interface MyClass : NSObject
@property (nonatomic, copy) NSString *indirectProperty;
@end
@implementation MyClass {
NSString *_directProperty;
}
- (NSString *)directProperty {
return _directProperty;
}
- (void)setDirectProperty:(NSString *)directProperty {
_directProperty = [directProperty copy];
}
@end
```
这样,在使用 `RAC` 时,就可以通过访问器方法来访问 `direct` 变量了,例如:
```objective-c
MyClass *obj = [[MyClass alloc] init];
[obj rac_observeKeyPath:@"directProperty" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {
NSLog(@"directProperty changed: %@", value);
}];
obj.directProperty = @"new value";
```
需要注意的是,当使用 `RAC` 观察 `direct` 变量时,不能直接使用 `RACObserve` 宏,而需要使用 `rac_observeKeyPath:options:observer:block:` 方法来观察变量。这是因为 `RACObserve` 宏只能用来观察 `@property` 修饰的变量,不能用来观察实例变量。另外,需要手动实现访问器方法,才能让 `RAC` 正常工作。