我有以下课程:
@interface Location : RKObject <NSCoding>{
NSNumber* _latitude;
NSNumber* _longitude;
NSNumber* _route_order;
CLLocationCoordinate2D coordinate;
}
@property (nonatomic, retain) NSNumber* latitude;
@property (nonatomic, retain) NSNumber* longitude;
@property (nonatomic, retain) NSNumber* route_order;
- (id) initWithLatitude:(double) lat andLongitude:(double) longt;
@end
我想将coordinate.latitude与_latitude doubleValue绑定,并使用经度绑定相同的东西。因此,coordinate.latitude的值总是设置为当前在_latitude的任何值。这是否可以在Objective-C
中实现答案 0 :(得分:1)
我不相信有任何办法可以做你要求的。但是如果你错误地提出了你的请求,并希望latitude
属性访问坐标的纬度(而不是_latitude
ivar ),那么这很简单编写自定义getter和setter方法的问题:
- (NSNumber *)latitude {
return [NSNumber numberWithDouble:coordinate.latitude];
}
- (void)setLatitude:(NSNumber *)value {
coordinate.latitude = [value doubleValue];
}
然后你可以完全摆脱_latitude
ivar。
答案 1 :(得分:1)
在Objective-C中没有“魔法”绑定你可以做什么而不是合成属性就是编写访问器(这实际上是@synthesize
在编译中真正做的事情),某事那样:
@interface Location : RKObject <NSCoding> {
NSNumber* _route_order;
CLLocationCoordinate coordinate;
}
@property (nonatomic, assign) NSNumber* latitude;
@property (nonatomic, assign) NSNumber* longitude;
@property (nonatomic, retain) NSNumber* route_order;
- (id) initWithLatitude:(double) lat andLongitude:(double) longt;
@end
当实现访问器而不是合成它们时,retain / assign / readonly关键字有点信息。在这个例子中,我使用了assign,因为你的属性实际上不会保留传递的引用。
实施中:
@implementation Location
// note the absence of @synthesize there
- (NSNumber *)latitude { return [NSNumber numberWithDouble:latitude]; }
- (NSNumber *)longitude { return [NSNumber numberWithDouble:longitude]; }
- (void)setLatitude:(NSNumber *)latitude { coordinate.latitude = [latitude doubleValue]; }
- (void)setLongitude:(NSNumber *)longitude { coordinate.longitude = [longitude doubleValue]; }
@end
与“绑定”技术相关的另一个替代方案是KVO,但有点偏离主题imho,因为这对于这么简单的情况来说有点过于复杂。
答案 2 :(得分:0)
你想要做的是:
@synthesize latitude = _latitude;
这会使你的纬度属性的合成setter和getter方法改变你的_latitude ivar。