将变量的绑定属性绑定到另一个变量

时间:2011-04-06 01:12:09

标签: iphone objective-c

我有以下课程:

@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

中实现

3 个答案:

答案 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。

相关问题