将数据插入自定义对象
Inserting data into a custom object
我对 ObjC 还是有些陌生,所以如果我的术语不正确,请原谅我。
我有一个 Web 服务,它 return 数组中包含以下事件数据:
- eventName
- eventAddress
- eventCity
webservice 数组的大小会不时变化,具体取决于某一天发生的事件数量。
我的问题是我需要自动将此网络服务数据拉入自定义 class(RandomEvent),但我不确定具体如何操作。
我可以像这样手动完成,但是由于网络服务 return 数组的大小不同,所以这样做没有意义(见下文):
- (NSArray *)todaysEvents {
RandomEvent *event1 = [RandomEvent new];
[event1 setName:eventName[0]];
[event1 setAddress:eventAddress[0]];
[event1 setCity:eventCity[0]];
RandomEvent *event2 = [RandomEvent new];
[event2 setName:eventName[1]];
[event2 setAddress:eventAddress[1]];
[event2 setCity:eventCity[1]];
RandomEvent *event3 = [RandomEvent new];
[event3 setName:eventName[2]];
[event3 setAddress:eventAddress[2]];
[event3 setCity:eventCity[2]];
return @[event1, event2, event3];
}
我知道我将不得不遍历 web 服务数组,但这是我所能得到的。将数组值分配给我的自定义 class 的最佳方法是什么?任何指导将不胜感激。
假设 eventName eventAddress eventCity
具有相同的长度,我们可以很容易地迭代它们。可变数组可用于保存所有创建的 RandomEvent
对象。请注意,如果 eventAddress 或 eventCity 数组之一的长度与其他数组的长度不同,还会进行安全检查。
- (NSArray *)todaysEvents {
NSMutableArray *eventsArray = [[NSMutableArray alloc] init];
for (int i = 0; i < eventName.count; i++){
if ((eventAddress.count < i) && (eventCity.count < i)){
RandomEvent *event = [[RandomEvent alloc] init];
[event setName:eventName[i]];
[event setAddress:eventAddress[i]];
[event setCity:eventCity[i]];
[eventsArray addObject:event];
}
}
return [NSArray arrayWithArray:eventsArray];
}
另一个建议是在从 Web 服务中读取对象后立即创建 RandomEvent
对象。这样就不必传递额外的数组了。
为您编码:
- (NSArray *)todaysEvents {
NSMutableArray *resultArray = [NSMutableArray new];
for (int i = 0; i<eventName.count; i++) {
RandomEvent *event = [RandomEvent new];
[event setName:eventName[i]];
[event setAddress:eventAddress[i]];
[event setCity:eventCity[i]];
[resultArray addObject:event];
}
return [NSArray arrayWithArray:resultArray];
}
但据我了解,您正在尝试将收到的 JSON 手动解析为对象。这对你来说可能需要很长时间。尝试使用像这样的映射框架 https://github.com/EasyMapping/EasyMapping .
这不是特定于编程语言的。这是一个更面向对象的问题
是的,你是对的,你必须遍历结果以在 DTO 之间映射以查看模型。这听起来可能在重复,但它是 important/helpful 解耦 DTO 和查看模型。
从您的示例代码看来,您有多个数组,用于 eventName、eventAddress 等。
最好有一个响应对象数组。
所以结构应该是 Array of ResponseObjects
Class ResponseObject
@属性 事件名称
@属性 事件地址
@属性 事件城市
**** 伪代码 ****
- (NSArray*)mapDTOtoViewModel:(NSArray)_responseArray{
//使用initWithCapacity代替init
NSMutableArray viewModels = [NSMutableArray alloc] initWithCapacity:[_responseArray count]];
//使用快速枚举以获得更好的性能
对于(响应 *_responseArray 中的响应){
RandomEvent *event = [RandomEvent new];
[事件 setName:response.eventName];
[事件 setAddress:response.eventAddress];
[事件 setCity:response.eventCity];
[viewModels addObject:event];
}
return 视图模型;
}
我对 ObjC 还是有些陌生,所以如果我的术语不正确,请原谅我。
我有一个 Web 服务,它 return 数组中包含以下事件数据:
- eventName
- eventAddress
- eventCity
webservice 数组的大小会不时变化,具体取决于某一天发生的事件数量。
我的问题是我需要自动将此网络服务数据拉入自定义 class(RandomEvent),但我不确定具体如何操作。
我可以像这样手动完成,但是由于网络服务 return 数组的大小不同,所以这样做没有意义(见下文):
- (NSArray *)todaysEvents {
RandomEvent *event1 = [RandomEvent new];
[event1 setName:eventName[0]];
[event1 setAddress:eventAddress[0]];
[event1 setCity:eventCity[0]];
RandomEvent *event2 = [RandomEvent new];
[event2 setName:eventName[1]];
[event2 setAddress:eventAddress[1]];
[event2 setCity:eventCity[1]];
RandomEvent *event3 = [RandomEvent new];
[event3 setName:eventName[2]];
[event3 setAddress:eventAddress[2]];
[event3 setCity:eventCity[2]];
return @[event1, event2, event3];
}
我知道我将不得不遍历 web 服务数组,但这是我所能得到的。将数组值分配给我的自定义 class 的最佳方法是什么?任何指导将不胜感激。
假设 eventName eventAddress eventCity
具有相同的长度,我们可以很容易地迭代它们。可变数组可用于保存所有创建的 RandomEvent
对象。请注意,如果 eventAddress 或 eventCity 数组之一的长度与其他数组的长度不同,还会进行安全检查。
- (NSArray *)todaysEvents {
NSMutableArray *eventsArray = [[NSMutableArray alloc] init];
for (int i = 0; i < eventName.count; i++){
if ((eventAddress.count < i) && (eventCity.count < i)){
RandomEvent *event = [[RandomEvent alloc] init];
[event setName:eventName[i]];
[event setAddress:eventAddress[i]];
[event setCity:eventCity[i]];
[eventsArray addObject:event];
}
}
return [NSArray arrayWithArray:eventsArray];
}
另一个建议是在从 Web 服务中读取对象后立即创建 RandomEvent
对象。这样就不必传递额外的数组了。
为您编码:
- (NSArray *)todaysEvents {
NSMutableArray *resultArray = [NSMutableArray new];
for (int i = 0; i<eventName.count; i++) {
RandomEvent *event = [RandomEvent new];
[event setName:eventName[i]];
[event setAddress:eventAddress[i]];
[event setCity:eventCity[i]];
[resultArray addObject:event];
}
return [NSArray arrayWithArray:resultArray];
}
但据我了解,您正在尝试将收到的 JSON 手动解析为对象。这对你来说可能需要很长时间。尝试使用像这样的映射框架 https://github.com/EasyMapping/EasyMapping .
这不是特定于编程语言的。这是一个更面向对象的问题
是的,你是对的,你必须遍历结果以在 DTO 之间映射以查看模型。这听起来可能在重复,但它是 important/helpful 解耦 DTO 和查看模型。
从您的示例代码看来,您有多个数组,用于 eventName、eventAddress 等。
最好有一个响应对象数组。
所以结构应该是 Array of ResponseObjects
Class ResponseObject @属性 事件名称 @属性 事件地址 @属性 事件城市
**** 伪代码 ****
- (NSArray*)mapDTOtoViewModel:(NSArray)_responseArray{
//使用initWithCapacity代替init
NSMutableArray viewModels = [NSMutableArray alloc] initWithCapacity:[_responseArray count]];
//使用快速枚举以获得更好的性能
对于(响应 *_responseArray 中的响应){
RandomEvent *event = [RandomEvent new];
[事件 setName:response.eventName];
[事件 setAddress:response.eventAddress];
[事件 setCity:response.eventCity];
[viewModels addObject:event];
}
return 视图模型;
}