【发布时间】:2014-02-21 19:37:32
【问题描述】:
刚开始使用 iOS 7 进行 iPhone 编程,我发现很难掌握简单的属性。当人们发现关于它们的文档(官方或其他)时,很难辨别什么是相关的,什么不再相关,因为在最近的几个版本中事情已经发生了变化。
我得到了基本模式,例如
@property (strong, nonatomic) NSString *name;
我知道如果我想直接访问,我应该参考 _name,但是在完成了属性之后,我可以/应该做self.name,这将变成[self setName: ...] 或[self name] 之类的东西我什至可以实现这些来产生副作用,并从中获得 KVO 行为。
我今天想冒险的新领域是拥有一个虚拟属性,这样我可以在访问/设置时使用点表示法,但我将定义访问/设置方法。更具体地说,我有一个具有以下“正常”属性的对象:
@property (strong, nonatomic) NSDate* started;
@property (strong, nonatomic) NSDate* paused;
@property (assign, nonatomic) BOOL repeat;
我想添加一个status 属性,该属性将返回/分配从这些值派生的NSDictionary。 “方法”部分我知道怎么写:
- (NSMutableDictionary*) status {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
if (self.started != nil)
dict[@"started"] = self.started;
if (self.paused != nil)
dict[@"paused"] = self.paused;
if (self.repeat)
dict[@"repeat"] = @(YES);
return dict;
}
和
- (void) setStatus: (NSDictionary*) doc {
self.started = doc[@"started"];
self.paused = doc[@"paused"];
self.repeat = doc[@"repeat"] != nil;
}
我不知道的是,我在哪里添加了什么魔法酱,这样我就可以使用self.status和self.status = @{}?在 iOS 7 / Xcode 5 中。我不需要这个虚拟/复合属性是 KVO'able。
【问题讨论】:
标签: ios objective-c ios7 properties xcode5