gpt4 book ai didi

ios - Objective-C 编写通用的 getter 和 setter 方法

转载 作者:可可西里 更新时间:2023-11-01 05:19:40 25 4
gpt4 key购买 nike

在我的项目中,我有一个设置类,其属性带有自定义 setter ,可以访问 NSUserDefaults 以使一切变得更简单。这个想法是 Settings 类有

@property NSString *name

它具有从 NSUserDefaults 获取名称值的自定义 getter 和将新值保存在那里的 setter。通过这种方式,在整个项目中,我只与设置类交互以管理用户定义的首选项。问题是编写所有的 getter 和 setter 似乎太重复了(我有大约 50 个属性),并且想创建一个适用于所有变量的 setter 和 getter。我唯一的问题是如何在 setter 中获取变量的名称。

那么最后一个问题是:是否有可能在 getter 或 setter 中找出函数被调用的属性?

如果您有其他方法,我也将不胜感激,但考虑到我想将所有 NSUserDefaults 内容保留在一个类中,我想不出不包括编写 50 的替代方法getter 和 setter。

谢谢!

最佳答案

另一种方法可能是这样。没有属性,只有键值下标。

@interface DBObject : NSObject<NSCoding>
+ (instancetype)sharedObject;
@end

@interface NSObject(SubScription)
- (id)objectForKeyedSubscript:(id)key;
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
@end

关于实现文件:

+ (instancetype)sharedObject {
static DBObject *sharedObject = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedObject = [[DBObject alloc] init];
});
return sharedObject;
}

- (id)objectForKeyedSubscript:(id)key {
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}

- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key {
[[NSUserDefaults standardUserDefaults] setObject:obj forKeyedSubscript:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}

现在,您可以像这样使用它:

 // You saved it in NSUserDefaults
[DBObject sharedObject][@"name"] = @"John";

// You retrieve it from NSUserDefaults
NSLog(@"Name is: %@", [DBObject sharedObject][@"name"]);

我认为这是最好的方法,也是我将来会使用的方法。

关于ios - Objective-C 编写通用的 getter 和 setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38594124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com