ios - 将数据从 json 模型传输到数组
问题描述
是否可以将 int 和 string 值都保存在数组中?我需要帮助。我从 JSON API 中提取数据。但我无法将一些变量转移到数组中。
我的模型是:
struct Input: Codable {
let name: String
let species: Species
let gender: Gender
let house, dateOfBirth: String
let yearOfBirth: YearOfBirth
let ancestry, eyeColour, hairColour: String
let wand: Wand
let patronus: String
let hogwartsStudent, hogwartsStaff: Bool
let actor: String
let alive: Bool
let image: String
}
enum YearOfBirth: Codable {
case integer(Int)
case string(String)
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let x = try? container.decode(Int.self) {
self = .integer(x)
return
}
if let x = try? container.decode(String.self) {
self = .string(x)
return
}
throw DecodingError.typeMismatch(YearOfBirth.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for YearOfBirth"))
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .integer(let x):
try container.encode(x)
case .string(let x):
try container.encode(x)
}
}
}
当我将 yearOfBirth 获取为字符串或整数数组时,它给出错误无法将类型“YearOfBirth”的值转换为预期的参数类型“字符串”
打印 yearOfBirth :
integer(1980)
integer(1979)
integer(1980)
integer(1980)
integer(1925)
integer(1977)
string("")
integer(1960)
解决方案
您将和值都保存在一个数组中。Int
String
要检索它们,假设您有let years = [YearOfBirth]
:
for year in years {
switch year {
case .string(let text): print(text) // You can handle texts here
case .integer(let number): print(number) // You can handle numbers here
}
}
此外,您可以将 all 转换为整数数组,例如:
let numbers: [Int] = years.compactMap { if case .integer(let number) = $0 { return number } else { return nil } }
推荐阅读
- mysql - 我的 TRIGGER sql 语句有什么问题 - MySQL
- javascript - 用于单击 css 的锚标记的border-bottom
- android - 如何在 Android Studio 中获取原始资源的文件路径?
- node.js - MVC 中的 NodeJS Express 密码重置
- c# - 如何使用 fiddler c# 在系统代理设置中包含绕过 URL 的列表
- sql - 将数据从一个表插入另一个表但在不同的数据库中
- python - /bin/bash -i 覆盖 PS1
- android - 不推荐使用 Google Places api 后如何使用地点选择器
- html - HTML5 中的自动完成关闭
- python - 有没有办法用 for 循环计算布尔函数中有多少真/假输出?