使用 Codable 从 2 个不同的 JSON 文件实例化单个类,而不使用选项

2023-12-30

我正在使用提供 2 个 JSON URL 的 API。每个 URL 都包含一个嵌套容器,该容器具有属于同一类和对象的不同属性。

JSON 网址 1

{
  "last_updated": 1535936629,
  "xyz": 5,
  "data": {
    "dataList": [
      {
        "id": "42",
        "a1": "a1value",
        "a2": "a2value",
      },
      // ,,,
    ]
  }
}

JSON 网址 2

{
  "last_updated": 1536639996,
  "xyz": 5,
  "data": {
    "dataList": [
      {
        "id": "42",
        "lat": "12.345",
        "lon": "67.890",
      },
      // ,,,
    ]
  }
}

我想使用这些 JSON URL 来使用嵌套中的项目创建单个 Codable CustomClass 对象dataList列表,所以我创建了一个Feedstruct 来处理这 2 个 JSON 文件。

快速进给

import Foundation

Struct Feed: Decodable {
  var lastUpdated: Int
  var xyz: Int
  var data: KeyedDecodingContainer<Feed.dataCodingKey>
  var dataList: [CustomClass]

  enum CodingKeys: String, CodingKey {
    case lastUpdated = "last_updated"
    case xyz
    case data
  }

  enum dataCodingKey: String, CodingKey {
    case dataList
  }

  init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    self.lastUpdated = try decoder.decode(Int.self, forKey: .lastUpdated)
    self.xyz = try container.decode(Int.self, forKey: .xyz)
    self.data = try container.nestedContainer(keyedBy: dataCodingKey.self, forKey: .data)
    self.dataList = try data.decode([CustomClass].self, forKey: .dataList)
  }
}

自定义类.swift

class CustomClass: NSObject, Decodable, MKAnnotation {

    var id: String?
    var a1: String?
    var a2: String?
    var lat: Double?
    var lon: Double?
    var coordinate: CLLocationCoordinate2D?

    enum CodingKeys: String, CodingKey {
        case id
        case a1
        case a2
        case lat
        case lon
    }

    required init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        self.id = try values.decode(String.self, forKey: .id)
        self.a1 = try values.decodeIfPresent(String.self, forKey: .a1)
        self.a2 = try values.decodeIfPresent(String.self, forKey: .a2)
        self.lat = try values.decodeIfPresent(Double.self, forKey: .lat)
        self.lon = try values.decodeIfPresent(Double.self, forKey: .lon)
        self.coordinate = CLLocationCoordinate2D(latitude: self.lat?, longitude: self.lon?)
    }
}

我收到以下错误

非“@objc”属性“坐标”不满足“@objc”协议“MKAnnotation”的要求

我认为我遇到的问题是coordinate需要是非可选的。但是,那lat and lon解码 URL1 时变量将始终为零,因为它们不存在于该 JSON 文件中。如何在不设置选项的情况下从这 2 个 JSON URL 进行解码,以便我可以设置coordinate多变的?


MKAnnotation需要一个只读变量coordinate所以使用计算属性:

var coordinate : CLLocationCoordinate2D {
    return CLLocationCoordinate2D(latitude: lat ?? 0.0, longitude: lon ?? 0.0)
}

另请参阅我对您的回答上一个问题 https://stackoverflow.com/questions/52342229/using-codable-to-decode-different-classes-using-the-same-key建议使用多个结构/类和泛型,如果您想避免可选,这是唯一的方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Codable 从 2 个不同的 JSON 文件实例化单个类,而不使用选项 的相关文章

  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • 多次重定义错误

    在了解了有关类和指针的更多信息后 我重构了一个程序并删除了超过 200 行代码 在此过程中创建了另外两个类 Location and Piece 问题是 在编译完所有内容后 链接器抱怨构造函数Piece被定义了多次 有很多错误 In fun
  • 有没有办法在 Firebase 中等待查询完成?

    我正在使用 TableView 在 Viewcontroller 中的 iOS 应用程序中进行查询 我想确保在继续加载 TableView 之前我的查询已经返回 有没有办法保证查询已经完成 None
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • $0 和 $1 在 Swift 闭包中意味着什么?

    let sortedNumbers numbers sort 0 gt 1 print sortedNumbers 谁能解释一下什么 0 and 1在斯威夫特中意味着什么 另一个样本 array forEach actions append
  • Swift:长按手势识别器 - 检测轻击和长按

    我想连接一个动作 如果手势是点击 它会以特定的方式为对象设置动画 但如果按下持续时间超过 0 5 秒 它会执行其他操作 现在 我刚刚连接了动画 我不知道如何区分长按和点击 如何访问新闻持续时间以实现上述目的 IBAction func ta
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 动态调度协议扩展不适用于多个目标

    这是我的主要目标中的代码 所以不是测试目标 protocol ProtocolA func dontCrash extension ProtocolA func dontCrash fatalError func tryCrash dont
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 如何在 Swift 2.0 中使用 stringByAddingPercentEncodingWithAllowedCharacters() 作为 URL

    我在 Swift 1 2 中使用过这个 let urlwithPercentEscapes myurlstring stringByAddingPercentEscapesUsingEncoding NSUTF8StringEncoding
  • UIViewController 内的 UIsearchController 使用自动布局

    有没有人成功实施过UIViewController其中包含两个UISearchController searchBar and a UItableView使用自动布局来布局所有内容 我正在尝试实现类似的目标1密码 https itunes
  • 在 Object 子类及其自己的子类上实现ignoreProperties()

    我是领域新手 我正在使用继承自 Object 的基类以及该基类的自定义子类创建模型 我的模型要求基类通过覆盖静态来声明一些属性被忽略ignoredProperties 方法 当尝试在某些基类子类上重写该方法时 我收到一个 Swift 编译器
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • C/C++ 中线程本地存储 (TLS) 的实现(多线程)

    我想了解的实施Thread local storage TLS 类型 可用于C 11 as thread local关键字或在C as thread关键词 这维基百科 http en wikipedia org wiki Thread Lo
  • 在下面的过程中如何使用ROW_NUMBER?

    我有以下返回的存储过程A B 以及按降序排列的计数 我正在尝试使用ROW NUMBER 这样我就可以对记录进行分页 但我想要第一行号1成为计数最高的记录 所以基本上 如果我返回一个包含 3 条记录的表 并且计数为30 20 10 然后是行号
  • 为什么 VS Code TypeScript IntelliSense 不建议实现嵌套命名空间中的接口?

    我有一个两级嵌套的命名空间 在全局范围内有一堆接口 declare global namespace A namespace B interface I1 interface I2 例如 我写了一些 C 类A B I1接口实现 class
  • 使用 jQuery load() 和 pushState() 模拟帧

    tl 博士总结 jQuery 的load http api jquery com load 方法调用如下 foo load similar html foo 结果 DOM 结构为 div div div div 使用 jQuery 将页面的
  • Postgres 中的 AFTER 触发器会阻止插入/更新吗?

    如果我在 PostgreSQL 中设置一个 AFTER 触发器在插入 更新后触发 调用软件是否必须等待触发器完成才能将控制权返回给调用软件 或者触发器会在幕后自行运行吗 是的 因为它是在同一事务中执行的 如果触发器失败 插入 更新也会失败
  • 寻找合适的数据结构

    我有N把钥匙 我需要找到一个可以执行以下操作的数据结构 用 O N 构建它 在 O 1 中求最小值 删除 O logn 中的中位数 求n 2 7 最大的数 我考虑过使用最小堆 构建是 O n 最小是 O 1 root 然而 我很难找到一种方
  • 修复使用不同数量的核心进行并行模拟运行的种子

    我想并行化模拟研究以加快速度 并且我还想考虑再现性 特别是 我想获得与使用相同的结果set seed在顺序模拟运行开始时 这是我尝试设置它的示例 我故意使用 inorder T here library doSNOW library rle
  • 使用 Scala API 将 TSV 读入 Spark Dataframe

    我一直在尝试让用于读取 CSV 的 databricks 库正常工作 我正在尝试使用 scala api 将 hive 创建的 TSV 读取到 Spark 数据帧中 这是一个可以在 Spark shell 中运行的示例 我公开了示例数据 以
  • iOS web view的滚动条变成了一半应该是

    使用 Xcode 5 iOS 7 将 Web 视图的框架从 0 45 320 568 20 45 49 更改为 0 0 320 568 20 或将其更改回来后会出现问题 其超级视图是其带有帧 0 20 320 548 到应用程序窗口的 ro
  • 将“myself”从 C# 转换为 VB.NET

    我是一名 C 程序员 爱好 但我想转换为 VB NET 程序员 我看过很多用 C 和 VB NET 编写的帖子 但我需要一些从基础知识 如 void main void 到最高级的解释的链接 注意 微软博客 到目前为止我读到的任何内容 都没
  • 如何通过 cordova 插件添加 android:allowBackup="false"

    我现在正在开发一个Cordova Plugin 我想补充一下 android allowBackup true into AndroidManifest xml 但我不知道如何指定它plugin xml Answer shared http
  • 如何使用react leaflet向地图添加图例,而不使用refs并手动修改DOM?

    我正在使用react leaflet 并想向地图添加图例 目前 我可以通过将地图的引用传递给自定义组件并呈现 null 同时让函数创建 HTML 并将其添加到地图来实现此目的 使用 Jest 和 Enzyme 进行测试对裁判来说是一场噩梦
  • 客户端找不到“socket.io.js”文件

    我正在用 Express Handlebars 和 Socket IO 做一个个人项目 我设置了 Express 和 Handlebars 部分 但当我尝试将客户端连接到 socket io 时 通过将脚本标记放在页面上 它找不到它 我尝试
  • 在大数组上使用多个“.filter”调用是否会降低性能?

    我写了这段代码来过滤单词数组 我为想要过滤掉的每种类型的单词编写了一个过滤函数 并将它们按顺序应用到数组中 const wordArray rawArray filter removeNonDomainWords filter remove
  • 以编程方式启用 JDK 类的日志记录

    好吧 案例很简单 我需要能够以编程方式启用 禁用 JDK 类 HttpURLConnection 的日志记录 public class HttpLoggingTest Just a dummy to get some action from
  • Python 中带有子进程的 Shell 管道

    我阅读了在 StackOverflow 上找到的关于使用 Python 调用 shell 命令的所有线程subprocess 但我找不到适用于我的情况的答案 我想从 Python 中执行以下操作 运行外壳命令command 1 收集变量中的
  • VS 2022 17.1.3 目前不会命中断点

    我正在尝试调试我的 Visual Studio C Blazor 项目 但是每当我尝试设置断点时 都会收到错误 当前不会命中断点 未绑定断点 或 尚未加载任何符号 我一直能够调试直到最新的视觉版本 我已经尝试过以下方法 调试模式而不是发布模
  • ColdFusion 和 Java(docx4j 库)

    我需要进行 docx 操作 查找 替换占位符以及选中 取消选中复选框 由于 ColdFusion 10 与 Java 集成得很好 我决定尝试使用 Java 库 docx4j 它基本上模仿了 OpenXML SDK net 平台 我在自定义文
  • R 中浮点精度的极端数值

    有人可以解释一下以下输出吗 我知道它与浮点精度有关 但数量级 差异 1e308 令我惊讶 0 高精度 gt 1e 324 0 1 TRUE gt 1e 323 0 1 FALSE 1 非常不精确 gt 1 1e 16 1 1 FALSE g
  • 使用 Codable 从 2 个不同的 JSON 文件实例化单个类,而不使用选项

    我正在使用提供 2 个 JSON URL 的 API 每个 URL 都包含一个嵌套容器 该容器具有属于同一类和对象的不同属性 JSON 网址 1 last updated 1535936629 xyz 5 data dataList id