美文网首页
SwiftJSON解读

SwiftJSON解读

作者: 贝灬小晖 | 来源:发表于2020-07-23 09:58 被阅读0次

前言:
SwiftJSON用起来是非常舒服的
比如这种东西,再也不需要判断 ? !了 很舒服


image.png

下面看下内部代码:

1.拿值的时候
原理:
JSON 是一个结构体
内部用到了很多协议
通过把请求拿到的数据 在内部进行了转换
json字符串 -> json对象 -> JSON结构体对象
init方法最终都回归到

image.png

object通过set get方法

image.png

在unwrap方法中进行了多次的递归

2.取值的时候:
比如:

json["respCode"].stringValue

这个是通过下标访问
这个是需要实现


image.png

注释上还标着 这两种写法,有空可以都试试 因人喜好


image.png
通过取 key “respCode” 进行获取
image.png
获取o值后 再进行
image.png

比如字符串 “0”
他会先生成并规定了 是一个number类型的数据


image.png

取的时候 我们如果取字符串类型的话


image.png

stringValue的get方法 会把他之前的类型判断出来 然后进行获取 转为字符串给我们发过来

3.ExpressibleByStringLiteral协议
看到源码中用到了很多

image.png

这是干嘛的??
查询后

在Swift的标准库中,大约有63种协议,每一个都有对我们编程都有很大的帮助,其中ExpressibleByStringLiteral非常的有意思,看它的命名可以确定它和表达式有关,举个例子:

let url = URL(string: "https://www.apple.com")!

我们对于URL来说当我们要传入一个URL的字符串形式,可以这么做,那么我们看如果实现了ExpressibleByStringLiteral我们可以怎么做:

let url: URL = "https://www.apple.com"

是的!可以这么做,那怎么实现这种方式呢?

extension URL: ExpressibleByStringLiteral {
    public init(stringLiteral value: String) {
        guard let url = URL(string: value) else {
            preconditionFailure("URL initialize failure")
        }
        self = url
    }
}
let url: URL = "https://www.apple.com"

嗯~ 就是这样的,看起来还不错。所以对于ExpressibleByStringLiteral来说,就是把一个字符串表达式转换成一个不是字符串的对象。当然实现init方法里你要自己去琢磨一下怎么去写。

竟然还有这种写法 哈哈

相关文章

网友评论

      本文标题:SwiftJSON解读

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