美文网首页swift优秀框架SwiftUI教程与源码
SwiftUI之Codable是什么(含解析JSON源码)

SwiftUI之Codable是什么(含解析JSON源码)

作者: iCloudEnd | 来源:发表于2020-05-16 18:40 被阅读0次

    什么Codable

    Codable是一种将JSON数据(或字典)绑定到Swift中的模型/类/对象的方法。 Codable首先在Swift 4中可用,它省去了手动绑定和保护JSON响应的工作。

    实战代码

    Jietu20200516-183808@2x.jpg

    Codable协议使解码平面数据变得很简单:如果您解码的是一个类型的单个实例,或者这些实例的数组或字典,那么一切就正常了。下面我们将解码稍微复杂一点的JSON:

    一个array中包含另外一个array,并使用不同的数据类型

    如果要解码这种分层数据,关键是为每个级别创建单独的类型。只要数据与您要求的层次结构匹配,Codable就可以解码所有内容,而无需我们做进一步的工作。

    为了演示这一点,请将此按钮放入您的内容视图:

    Button("Decode JSON") {
        let input = """
        {
            "name": "Taylor Swift",
            "address": {
                "street": "555, Taylor Swift Avenue",
                "city": "Nashville"
            }
        }
        """
    
        // more code to come
    }
    

    这将在代码中创建一个 JSON 字符串。下面制作struct

    struct User: Codable {
        var name: String
        var address: Address
    }
    
    struct Address: Codable {
        var street: String
        var city: String
    }
    

    希望现在您可以看到 JSON 包含的内容:用户具有名称字符串和地址,地址是街道字符串和城市字符串。

    现在,对于最好的部分:我们可以将 JSON 字符串转换为数据类型(这是可编码的,然后将其解码为用户实例:

    let data = Data(input.utf8)
    let decoder = JSONDecoder()
    if let user = try? decoder.decode(User.self, from: data) {
        print(user.address.street)
    }
    

    如果你运行该程序,并点击按钮,你应该看到打印出来的地址 - 虽然只是为了避免疑问,我应该说,这不是她的实际地址!

    可编码的级别数量没有限制 - 重要的是您定义的结构与您的 JSON 字符串匹配。

    项目完代码

    import SwiftUI
    
    struct User: Codable {
        var name: String
        var qq: String
        var address: Address
    }
    
    struct Address: Codable {
        var street: String
        var city: String
    }
    
    struct ContentView: View {
    
        var body: some View {
            VStack{
                Text("SwiftUI之Codable是什么,有什么用")
                    .frame(maxWidth:.infinity)
                    .padding()
                    .background(Color.orange)
                    .padding()
                Button("解析JSON") {
                    let input = """
                    {
                        "name": "知识大胖",
                        "qq": "3365059189",
                        "address": {
                            "street": "北京",
                            "city": "北京"
                        }
                    }
                    """
    
                    let data = Data(input.utf8)
                    let decoder = JSONDecoder()
                    if let user = try? decoder.decode(User.self, from: data) {
                        print(user.address.street)
                    }
                }
            }
            //.background(Color.orange)
        }
    }
    

    推荐

    基础文章推荐

    经典教程推荐

    技术源码推荐

    基础

    推荐文章

    CoreData篇

    TextField篇

    JSON文件篇


    一篇文章系列

    技术交流

    QQ:3365059189
    SwiftUI技术交流QQ群:518696470

    相关文章

      网友评论

        本文标题:SwiftUI之Codable是什么(含解析JSON源码)

        本文链接:https://www.haomeiwen.com/subject/kdprohtx.html