gpt4 book ai didi

ios - 使用 NSDictionary 创建模型对象

转载 作者:行者123 更新时间:2023-11-29 12:45:43 24 4
gpt4 key购买 nike

这是我一直在玩的东西,但还没有下定决心。

查询数据库时,使用响应中的数据创建自定义模型对象是非常常见的。让我们以“书”为例。

我收到了描述多个 Book 对象的 JSON。我将 JSON 解析为 NSDictionaryNSArray。我现在有几个选择:

  • 使 Book 上的所有属性可变(我讨厌这个选项)。然后,您可以拥有一个 BookManager 类,该类采用 NSDictionaryNSArray 并将字典中的数据映射到正确的属性。

  • 向接受重要细节的 Book 对象添加一个初始化程序。

例子:

- (instancetype)initWithTitle:(NSString *)title author:(NSString *)author publishDate:(NSDate *)publishDate;

前面提到的 BookManager 类然后可以像以前一样采用 NSDictionary,但使用此初始化程序创建 Book 对象。这很好,因为您可以将 Book 上的所有面向公众的属性设为 readonly。然而,这是非常有限的,如果(通常情况下)模型上有很多属性,这是不可行的。

  • Book 添加一个初始化程序,它接受自身的 NSDictionary 表示。我在某种程度上不喜欢这种方法,因为我觉得责任不是模型根据字典创建自己的责任。我更喜欢管理类将字典映射到模型的想法。但是,我喜欢这样一个事实,即所有属性都可以是readonly

毫无疑问,我还缺少其他选项,如果您知道,请指出。这个问题的目的是最终确定处理这种情况的最佳方法。

最佳答案

我经常使用带有重要参数的 init 方法,但是,是的,当参数数量达到两位数和/或几个参数可能为零时,它会变得非常笨拙。我在 iOS SDK 中看到的最长的此类方法是 CLLocation

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
altitude:(CLLocationDistance)altitude
horizontalAccuracy:(CLLocationAccuracy)hAccuracy
verticalAccuracy:(CLLocationAccuracy)vAccuracy
course:(CLLocationDirection)course
speed:(CLLocationSpeed)speed
timestamp:(NSDate *)timestamp

关于您的最后一个选项,添加一个 initWithDictionary: Book 的方法可以扩展为还包括用于创建 Book 实例的类级方法来自 NSDictionary .

+ (instancetype)bookWithDictionary:(NSDictionary *)dictionary

以及可选的从 Book 中获取字典表示的便捷方式实例。

- (NSDictionary *)dictionaryRepresentation

如果您在 iOS 文档中搜索“withDictionary”和“dictionaryRepresentation”,您会看到一些使用它的地方。在其他 SDK 中,您有时会看到名为 someObjectFromDictionary: 的方法。

关于ios - 使用 NSDictionary 创建模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735785/

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