TL;DR将Express-C @property (...) foo
作为foo
而不是self.foo
访问的正确方法是什么?
详情 :
我的一个iOS项目仍然使用我几年前编写的一些Deliver-C代码.
// SomeObject.h
@interface SomeObject : NSObject
@property (nonatomic, readonly) NSString *foo;
@end
// SomeObject.m
@implementation SomeObject { ... }
@synthesize foo;
- (void)someMethod {
foo = @"bar";
}
- (void)otherMethod {
NSLog(@"Foo: %@", foo); // ---> "bar"
}
@end
这按预期工作得很好.现在我想使用getter来访问一些新的Swift代码,而不是手动设置foo
:
// SomeObject.m
@implementation SomeObject { ... }
@synthesize foo;
- (NSString *)foo {
return [SwiftObject getFoo];
}
- (void)otherMethod {
NSLog(@"Foo: %@", foo); // ---> nil
NSLog(@"Foo: %@", self.foo); // ---> "swiftBar"
}
@end
因此,只有在使用self.foo
而不是仅使用foo
时,使用getter才正确.这不是一个大问题,但需要将现有代码中foo
的所有使用替换为self.foo
.
有没有一种干净的方法可以避免这种情况,使用foo
getter并且仍然使用foo
而不是self.foo
?