【发布时间】:2022-01-16 21:27:05
【问题描述】:
我有如下 JSON。
{
"type": "regular",
"data": [
{
"title": "Title 1",
"price_regular": 1.1,
"price_express": 2.2,
},
{
"title": "Title 2",
"price_regular": 1.1,
"price_express": 2.2,
}
]
}
为此,我有如下模型。
struct MainModel : Codable {
var type : String?
var data : [DataModel]?
}
struct DataModel : Codable {
var title : String?
var price_regular : Float?
var price_express : Float?
var price : Float {
get {
if (type == "regular") { ----> Please check below query for this.
return price_regular ?? 0.0
}
return price_express ?? 0.0
}
}
}
我在DataModel 中所做的是将新变量创建为price。我想检查我对主类type 有哪些数据,并在此基础上获得价格的价值。有什么办法可以做到这一点?
其实我是在做模特。我知道我可以使这个运行时,但我想在模型中执行此操作,以便逻辑仅在 1 个位置。
【问题讨论】:
-
你不能。你可以给
DataModel一个额外的属性type,它会让你知道价格。但这需要通过覆盖init(from decoder:)来自定义解析(JSON)。为什么这被标记为 Android btw? -
@Larme : 因为这种风格在 swift/android 中用得最多。所以考虑添加两个标签,否则只是模型不会更多地关注这个问题。另外我不做任何覆盖,因为上面的代码可以正常工作,但最重要的是我想知道如何访问前一个对象的变量。
-
@Larme :我所拥有的是交付类型,基于此我将显示价格。因此,我在模型和类型中添加新变量为
price,我只在 1 个地方定义... -
因为你是用 Swift 编写的,所以它与 Android 并没有真正的联系,因为语言给它带来了一些适当的逻辑,这就是为什么在我看来,Android 标签具有误导性。而且,它是一个操作系统,所以很奇怪。