【Day 22】 Swift 5.5 Async/await 新特性

由於今天比较晚才到家,所以可能内容会比较少一点。

另外今天在火车上看到github上面有几个开源的 Github 分享列表。

有蛮多实用的东西

Open-Source iOS Apps

macOS status monitoring app written in SwiftUI.

github上面真的蛮多东西可以参考的。

现在进入正题

Async/await:

以前:

func fetchWeatherHistory(completion: @escaping ([Double]) -> Void) {
    // Complex networking code here; we'll just send back 100,000 random temperatures
    DispatchQueue.global().async {
        let results = (1...100_000).map { _ in Double.random(in: -10...30) }
        completion(results)
    }
}

func calculateAverageTemperature(for records: [Double], completion: @escaping (Double) -> Void) {
    // Sum our array then divide by the array size
    DispatchQueue.global().async {
        let total = records.reduce(0, +)
        let average = total / Double(records.count)
        completion(average)
    }
}

func upload(result: Double, completion: @escaping (String) -> Void) {
    // More complex networking code; we'll just send back "OK"
    DispatchQueue.global().async {
        completion("OK")
    }
}

以前调用的程序码

fetchWeatherHistory { records in
    calculateAverageTemperature(for: records) { average in
        upload(result: average) { response in
            print("Server response: \(response)")
        }
    }
}

现在可以使用这样的方式

func fetchWeatherHistory() async -> [Double] {
    (1...100_000).map { _ in Double.random(in: -10...30) }
}

func calculateAverageTemperature(for records: [Double]) async -> Double {
    let total = records.reduce(0, +)
    let average = total / Double(records.count)
    return average
}

func upload(result: Double) async -> String {
    "OK"
}

使用起来也更简单

func processWeather() async {
    let records = await fetchWeatherHistory()
    let average = await calculateAverageTemperature(for: records)
    let response = await upload(result: average)
    print("Server response: \(response)")
}

<<:  三种时间长短,让你简单培养习惯

>>:  Day 22 民生公共物联网资料应用竞赛 完整作品+海报!!

[DAY9]制作容器(八)

9/25: 隔一天才发现因为前一天字数不够,草稿发文不成功所以断赛了QQ 还是把昨天测试的结果放上来...

Day31 使用reCAPTCHA过滤robot

前言 想不到以前的草稿还能拿出来写。 最近将代码重构了,看情况回头修以前文章的bug(机率不大 re...

Day-15 RAID

RAID tags: IT铁人 这个硬碟有多棒 在评断一个硬碟有多高的Availability时,我...

day30: 完赛了,做个总结吧

今天终於来到终点拉! 前几届参加一直半途而废的我,这次因为有大团队的组队, 不管是激励或压力,都促使...

小学生学程序设计 Day 29:「同学们,按照身高排好! 实作篇」

嘿~~ 各位好,我是菜市场阿龙! 这集要介绍的是「泡泡排序(Bubble Sort)演算法的实作」 ...