Codable简单使用

这篇具有很好参考价值的文章主要介绍了Codable简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Swift中,需要将Json数据转为实体时,一种简单的方式就是使用系统提供的JSONDecoder进行解码,这种方式需要实体类或结构体继承(实现)(java说法)一个类型别名(typealias)为Codable的东西。这个东西长这样:

/// A type that can convert itself into and out of an external representation.
///
/// `Codable` is a type alias for the `Encodable` and `Decodable` protocols.
/// When you use `Codable` as a type or a generic constraint, it matches
/// any type that conforms to both protocols.
public typealias Codable = Decodable & Encodable

简单使用

普通的类或结构体,直接继承Codable 就行了,可以不用做别的实现,要是属性中有引用别的类或结构体,需要这个属性也要继承Codable ,如下:

struct  NewsResponse :Codable {
    var code: Int
    var msg: String
    var result: ResultModel
    struct  ResultModel : Codable {
        var curpage: Int
        var allnum: Int
        var newslist: [ListModel]
        struct  ListModel : Codable {
            var id: String
            var ctime: String
            var title: String
            let description: String
            var source: String
            var picUrl: String
            var url: String
        }
    }
}

但是如果这个类或结构体的属性中有泛型的话,需要多做一些处理,不然会有编译时错误,如图:
Codable简单使用,IOS-Swift学习,ios,json
需要多做一下处理:
Codable简单使用,IOS-Swift学习,ios,json
也可以多做一些处理:

    init(code: Int?, data: T?, msg: String?) {
            self.code = code
            self.data = data
            self.msg = msg
    }

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        code = try container.decode(Int.self, forKey: .code)
        data = try container.decode(T.self, forKey: .data)
        msg = try container.decode(String.self, forKey: .msg)
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(code, forKey: .code)
        try container.encode(data, forKey: .data)
        try container.encode(msg, forKey: .msg)
    }

    private enum CodingKeys: String, CodingKey {
        case code
        case data
        case msg
    }

Json解析

然后就可以解析数据了:
Codable简单使用,IOS-Swift学习,ios,json文章来源地址https://www.toymoban.com/news/detail-790426.html

do {
	let base = try JSONDecoder().decode(BaseBN<UserBN>.self, from: jsonData)
    let user=base.data
    if user != nil {
    	self.login(user: user!)
	}
    print(user as Any)
} catch {
  	print("Error decoding JSON: \(error)")
}

到了这里,关于Codable简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用swift创建第一个ios程序

    一、安装xcode 先到app store中下载一个Xcode app 二、创建项目 1、项目设定 创建ios app 2、工程结构 三、修改代码实现按键联动 四、运行测试

    2024年01月17日
    浏览(39)
  • 【iOS】json数据解析以及简单的网络数据请求

    近期写完了暑假最后一个任务——天气预报,在里面用到了简单的网络数据请求以及json数据的解析,特此记录博客总结 JSON是一种轻量级的数据格式,一般用于数据交互。目前JSON的使用非常广泛,绝大多数网络请求都采用了JSON格式。 举个例子: 这就是我们利用API请求到的

    2024年02月14日
    浏览(50)
  • 【iOS】—— swift基础语法及一些第三方库使用

    只能赋值一次 它的值不要求在编译时期确定,但使用之前必须赋值一次 可以被赋值多次 跟常量一样,在使用之前必须给他赋值,否则编译器会报错 这个第三方库和Masonry的作用和用法都很相似 其中这块我们看到和oc不同的是 Int(SIZE_HEIGHT) 这块有个强制类型转化,这块原因是

    2024年02月08日
    浏览(55)
  • ios客户端学习笔记(五):学习Swift的关键字和容易弄混的符号

    新找到一篇文,也比较全 swift 5.1语法 1小时入门 下面是Swift语言中的常见及其说明和代码应用实例: class:定义一个类,用于封装一组相关的属性和方法。 示例代码: struct:定义一个结构体,用于封装一组相关的值类型数据。 示例代码: enum:定义一个枚举类型,用

    2023年04月22日
    浏览(54)
  • iOS(一):Swift纯代码模式iOS开发入门教程

    1.修改 AppDelegate.swift 和 ViewController.swift 文件 2.删除 SceneDelegate.swift 和 Main.storyboard 文件 3.修改如图所示项 安装 CocoaPods 初始化项目(添加 Podfile 配置文件) 修改 Podfile 文件 安装 打开 ExDemoApp.xcworkspace 项目并向 ViewController.swift 添加示例代码 运行效果 安装 QMUIKit 方式一:触发

    2024年02月09日
    浏览(47)
  • iOS开发Swift-闭包

    将很长的闭包表达式作为最后一个参数传递给函数,不用写出他的参数标签。 嵌套函数可捕获其外部函数所有参数、变量、常量。 当一个闭包作为一个参数传到一个函数中,但闭包在函数返回之后才被执行,则称闭包逃逸。 标注@escaping,表示允许闭包逃逸。  包装传递给函数

    2024年02月11日
    浏览(63)
  • IOS-生命周期-Swift

    App主要有五种状态,分别是: 未运行——Not running 应用程序没启动 未激活——Inactive 程序在前台运行,不过没有接收到事件。 一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或

    2024年01月23日
    浏览(53)
  • iOS开发Swift-枚举

    枚举:一组相关的值定义了一个共同的类型,使你可以在代码中以类型安全的方式来使用这些值。 原始值:定义枚举时被预先填充的值。 (1)整数为原始值时,隐式赋值递增1。未设置原始值时,默认为0,之后递增1. (2)字符串为原始值,隐式赋值为枚举成员的名称。

    2024年02月11日
    浏览(56)
  • iOS开发Swift-函数

     (1)无参函数 (2)多参函数 (3)无返回值 (4)多重返回值 (5)可选元组返回类型(元组可以是nil) (6)隐式返回的函数 任一可以被写成一行return的函数,return(x) + for。 调用的时候: 方法名(for: 参数) (1)指定参数标签 (2)忽略参数标签 (3)默认参数值 (4)可变参数 一个可变参数可接受0个或多

    2024年02月11日
    浏览(55)
  • iOS开发Swift-控制流

    (1)复合匹配 (2)区间匹配 (3)元组匹配 (4)值绑定匹配 (5)where continue, break, fallthrough, return, throw continue: 停止本次循环,开始下次循环 break: 立即结束整个控制流。可以使用break忽略switch的分支。 fallthrough贯穿: switch中的case加入贯穿,case会穿透到下一个case/ default。

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包