将 JSON 字符串解码为类对象

2023-11-23

 private func createWeatherObjectWith(json: Data, x:Any.Type ,completion: @escaping (_ data: Any?, _ error: Error?) -> Void) {
        do {
            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase
            let weather = try decoder.decode(x.self, from: json)
            return completion(weather, nil)
        } catch let error {
            print("Error creating current weather from JSON because: \(error.localizedDescription)")
            return completion(nil, error)
        }
    }

这里我编写了上面的代码,通过传递类类型将 JSON 字符串解码为类对象。但它给出了以下错误

Cannot invoke 'decode' with an argument list of type '(Any.Type, from: Data)'

如果您尝试解码任何类型的对象,请使用这些技术

1. 泛型函数

private func createWeatherObjectWith<T: Decodable>(json: Data, Object:T.Type ,completion: @escaping (_ data: T?, _ error: Error?) -> Void) {
    do {
        let decoder = JSONDecoder()
        decoder.keyDecodingStrategy = .convertFromSnakeCase
        let weather = try decoder.decode(T.self, from: json)
        return completion(weather, nil)
    } catch let error {
        return completion(nil, error)
    }
}

2. 扩展可解码

extension Decodable {
    static func map(JSONString:String) -> Self? {
        do {
            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase
            return try decoder.decode(Self.self, from: Data(JSONString.utf8))
        } catch let error {
            print(error)
            return nil
        }
    }
}

Use:

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

将 JSON 字符串解码为类对象 的相关文章

随机推荐

  • Unwind Segue 在 Swift 3 和 iOS 10 中不起作用

    我正在尝试在 iOS 10 和 Swift 3 中测试 unwind segue I made a simple app like this 我添加了 segue 的代码TableViewController类并连接 取消 按钮并退出表视图
  • 从文本文件中删除^M字符的Shell命令[重复]

    这个问题在这里已经有答案了 可能的重复 删除 Unix 中的回车符 我正在读取外部第三方生成的一些数据 我注意到文件中的 ASCII 文本中散布着 M 字符 我认为这是 ASCII 中的字符 13 表示不带换行符的回车符 是否有一个行可以用
  • 如何在android中使用SharedPreference存储图像?

    我想使用 SharedPreference 在 android 中保存图像 我有两个活动类 当我单击第一个活动的按钮时 它将调用第二个活动 第二个活动在列表视图中显示我的首选名称 并将 Android 壁纸重置为我设置为首选壁纸的图像在第一
  • 将字符串列表作为 Airflow 中相关任务的参数传递

    我正在尝试通过以下方式将字符串列表从一个任务传递到另一个任务XCom但我似乎无法将推送列表解释回列表 例如 当我在某些函数中执行此操作时blah这是运行在ShortCircuitOperator paths gs format bucket
  • 获取 SoundCloud API 客户端 ID

    从浏览器访问我的轨迹时遇到问题 通常我在浏览器中输入此链接来访问可下载的曲目 http api soundcloud com tracks 294324164 download client id 02gUJC0hH2ct1EGOcYXQI
  • 将 google adsense 与 React + React Router 结合使用

    我正在尝试将 Google Adsense 集成到我的 React 网站中 但遇到了问题 为了在我的网页上投放广告 我已将此脚本标记包含在head我的 html 文件 这些广告被包装在一个简单的组件中 如下所示 export default
  • 关于使用 std::less 和 std::greater 与 std::sort 的混淆

    在C语言中 排序通常实现如下例 include
  • 为什么 NaN 不是有限的?

    测试isFinite函数我看到NaN is an infinite数 即使是不是一个数字 isFinite NaN returns false 这背后的逻辑是什么 为什么不是NaN finite 正如戴夫 牛顿所说 NaN 不是一个数字 然
  • Jenkins Gradle 集成:调用 Gradle 与使用 Gradle Wrapper 选项

    我刚刚开始在我的项目中使用 Jenkins for CI 和 Gradle 构建工具 I found 使用 Gradle 和 Jenkins 构建持续交付管道我不明白为什么作者建议 始终使用包装器 c 编号 120幻灯片 为什么这比直接涉及
  • 在全局范围内重新定义指针

    In 这个问题我对 C 的这个看似基本的方面感到非常困惑 考虑这两行代码 int ptr ptr 2 gcc 将发出以下警告 main cpp 4 1 warning data definition has no type or stora
  • Google 地图 API v3 放置搜索 - 将另一个参数传递给回调函数

    我正在使用 Google 地图地方 API v3 返回许多 类型 的地点 每个地点由地图上的不同标记表示 我创建一个 google maps places PlacesService 对象 然后为每个地点类型调用一次 搜索 方法 每次 我都
  • 异步任务 获取 VS HttpResponseMessage 获取

    我需要您在以下方面提供帮助 近一个月来 我一直在阅读有关 Tasks 和 async 的内容 我想尝试在一个简单的 Web API 项目中应用我新获得的知识 我有以下方法 并且它们都按预期工作 public HttpResponseMess
  • 如何在 PHP 中解析和处理 HTML/XML?

    如何解析 HTML XML 并从中提取信息 Answer recommended by PHP Collective 原生 XML 扩展 我更喜欢使用其中之一原生 XML 扩展因为它们与 PHP 捆绑在一起 通常比所有第 3 方库更快 并为
  • 比较 android 中的语音 wav 或语音标签(语音命令)API

    我正在开发一个应用程序 我需要某种方法来比较两个语音是否匹配 我知道语音识别器是一种方法 但因为 我认为 它需要首先将语音转换为字符串 所以除了语音识别器支持的语言之外 不太适合其他语言 有什么想法吗 就像过去的电话一样 语音标签只是将语音
  • 用 C 语言模仿 Python 的 strip() 函数

    我最近开始用 C 语言开发一个小玩具项目 并且一直在摸索模仿 python 字符串对象的 strip 功能的最佳方法 阅读 fscanf 或 sscanf 发现字符串被处理到遇到的第一个空格 fgets 也没有帮助 因为我仍然有换行符 我确
  • HTML5 History API 后退按钮,部分页面加载

    为了提高网站的性能 响应能力 我使用 AJAX replaceState pushState 和 popstate 侦听器实现了部分页面加载 我基本上将页面的中心部分 HTML 存储为历史记录中的状态对象 单击链接时 我仅从服务器请求页面的
  • 无法使用 Cocoapods 动态框架导入 RestKit

    我安装了 cocoapods 的预发布版本 0 26 并尝试安装最新版本的 RestKit 在我的podfile我已经打开了use frameworks 强制 cocoapods 使用动态框架的标志 Putting import RestK
  • SQL Server触发器-使用deletetime将删除的记录插入到另一个表中

    目前我有一个 Item 表和一个 ItemWaste 表 两个表都会有一些字段 例如 名称 金额等 但是 ItemWaste 表还会多一个字段 即 TimeWasted 我希望自动将 Item 表中的 DELETED 项目插入到 ItemW
  • 如何在Qt中实现下拉单词建议?

    假设我有 10 个名字QListWidget 这是隐藏的 和一个aQLineEdit 现在 如果我在 编辑 行中输入字母 a 它应该显示列表小部件中以字母 A 开头的所有名称的下拉列表 用户可以使用鼠标或键盘进行选择 因为会有一个垂直滚动条
  • 将 JSON 字符串解码为类对象

    private func createWeatherObjectWith json Data x Any Type completion escaping data Any error Error gt Void do let decode