将数据插入自定义对象

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 视图模型;

}