美文网首页Swift
处理结果值与结果值的处理

处理结果值与结果值的处理

作者: fuyoufang | 来源:发表于2019-11-07 17:34 被阅读0次

在应用程序中,经常会获取到一个结果值,然后对结果值进行处理。比如:网络请求结束后获取一个结果值,再讲这个结果值进行加工,转化为我们对应的实体类。

通常的写法如下:

static func request(_ url: URL, completion: ((Data) -> Void)? = nil) {
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let data = data {
            completion?(data)
        }
    }.resume()
}

为了说明问题,简化了很多代码。

当网络请求获取到结果 data 之后,调用 completion 对 data 进行处理。

能不能更近一步的简化对应的代码呢?在阅读 URLNavigator 框架的时候,学了另一种写法,我们看怎样更进一步简化代码。

extension Data {
    func apply(_ f: ((Data) throws -> Void)?) rethrows -> Void {
        try f?(self)
    }
}

static func request(_ url: URL, completion: ((Data) -> Void)? = nil) {
    URLSession.shared.dataTask(with: url) { data, response, error in
        data?.apply(completion)
    }.resume()
}

首先对 Data 方法进行了扩展。在需要处理 Data 类型的数据时,就可以将处理函数应用到扩展中 apply 方法上。达到进一步简化代码的目的。

对比这两种方式,第一种更加的直观,符合编程习惯;第二种可以使代码看起来更加简洁,但是增加了阅读代码的难度。如果处理方法调用次数较多时,不妨试一下。

相关文章

  • 处理结果值与结果值的处理

    在应用程序中,经常会获取到一个结果值,然后对结果值进行处理。比如:网络请求结束后获取一个结果值,再讲这个结果值进行...

  • 正则去除非指定域名的链接

    待处理内容:xxxx 内容 xxxx处理结果1:xxxx内容xxxx处理结果2:xxxx 内容 xxxx doma...

  • Future模式

    适用的情况 当一个线程向其他线程委托了处理, 然后还想要得到处理结果时. 实现的方式 编写一个与处理结果具有相同接...

  • 6.0 动态申请权限

    【1】 权限的判断 与申请 【2】权限申请的处理结果 【使用】

  • 小插图可以影响大人生

    教材插图问题的处理结果出来了,27人被问责。 我觉得处理的有点轻,但我也坚决拥护这个处理结果。 说处理的有点轻,是...

  • PHP curl使用

    curl代码 使用方法 接收处理方法 处理结果

  • 5.data_preprocessing_and_feature

    1.数据预处理与特征工程 1.1处理缺失值 1.1.1 直接删除缺失值多的样本和特征 1.1.2 计算缺失值与填充...

  • 练习1-18remove

    主函数也没有什么就是看看getline函数的处理结果是否大于0,然后在看看remove的处理结果是否大于0,然后打...

  • Python统计数组所有值个数与找出数组重复的值

    Python统计数组所有值个数与找出数组重复的值 输出结果 结果1 结果2

  • Swift Optional中的map和flatMap

    总结:map能够安全的处理可选类型,无需解包拿到确切的值,可在需要的时候再去处理得到的可选结果值,flatMap ...

网友评论

    本文标题:处理结果值与结果值的处理

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