gpt4 book ai didi

ios - 如何为使用数据创建的单例维护适当的封装

转载 作者:行者123 更新时间:2023-11-29 01:51:13 25 4
gpt4 key购买 nike

我有一个单例网络类以及一个需要在我的应用程序中保留的单例对象。单例是根据从网络调用中检索到的数据进行初始化的,所以现在我的代码可以正常工作,并且我的单例网络类中有以下内容:

- (void)initializeObjectWithSuccess:(void (^)(BOOL))success
failure:(void (^)(NSError *error))failure {
[self.HTTPClient postPath:[NSString stringWithFormat:@"users/%@/", [CPUser sharedUser].name parameters:[self createParameters] success:^(AFHTTPRequestOperation *operation, id responseObject) {
id json = [NSJSONSerialization JSONObjectWithData:responseObject
options:NSJSONReadingAllowFragments
error:nil];

[[CPList sharedList] setIdentifier:json[@"id"]];
[[CPList sharedList] setImages:json[@"images"]];
if (success) {
success(YES);
}

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}

我不知道如何在我的单例 CPList 上初始化我需要的所有属性而不在此方法中设置它们,但是我知道这不是正确的封装,因为 CPRequestManager 类应该对 CPList 类一无所知

最佳答案

如果您的问题是您不希望此类知道 CPList 的名称以及它是一个单例的详细信息,并且它可以通过 +[CPList sharedInstance] 访问它 然后你可以传入一个符合协议(protocol)的对象。这基本上将单例的知识转移到其他地方

- (void)initializeObjectWithList:(id<CPList>)list
success:(void (^)(BOOL))success
failure:(void (^)(NSError *error))failure;
{
[self.HTTPClient postPath:[NSString stringWithFormat:@"users/%@/", [CPUser sharedUser].name parameters:[self createParameters] success:^(AFHTTPRequestOperation *operation, id responseObject) {
id json = [NSJSONSerialization JSONObjectWithData:responseObject
options:NSJSONReadingAllowFragments
error:nil];


[list setIdentifier:json[@"id"]];
[list setImages:json[@"images"]];
if (success) {
success(YES);
}

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}

或者您可以删除所有存在“列表”的知识,只让此方法返回实际数据,然后调用者可以将其设置在列表中

- (void)initializeObjectWithSuccess:(void (^)(NSString *ID, NSArray *images))success
failure:(void (^)(NSError *error))failure;
{
[self.HTTPClient postPath:[NSString stringWithFormat:@"users/%@/", [CPUser sharedUser].name parameters:[self createParameters] success:^(AFHTTPRequestOperation *operation, id responseObject) {
id json = [NSJSONSerialization JSONObjectWithData:responseObject
options:NSJSONReadingAllowFragments
error:nil];

if (success) {
success(json[@"id"], json[@"images"]);
}

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}

如果没有任何进一步的上下文,很难建议结构更改,但这里有两个潜在的重构可能会让你思考你可以做什么

关于ios - 如何为使用数据创建的单例维护适当的封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392492/

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