<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Swift 團(tuán)隊又一重磅開源項目

          共 3125字,需瀏覽 7分鐘

           ·

          2022-05-26 08:09

          ????關(guān)注后回復(fù) “進(jìn)群” ,拉你進(jìn)程序員交流群????


          作為 Swift 向安全、簡單和高性能異步編程邁進(jìn)的一部分,Swift 核心團(tuán)隊引入了一個新的算法包:AsyncSequence。這個算法包被稱為 Swift Async Algorithms,現(xiàn)在已開源并可以在 GitHub 上獲取 https://github.com/apple/swift-async-algorithms。


          這個包有三個主要目標(biāo):


          • 與 async/await 的集成

          • 為基于時間的算法提供一個歸宿

          • 跨平臺和開源


          目標(biāo)

          AsyncAlgorithms 是一個算法包,用于處理隨時間變化的值。這包括主要與時間有關(guān)的算法,例如 debounce 和 throttle,還包括有關(guān)順序的算法,例如 combineLatest 和 merge。使用多個輸入的操作(如 zip 對 Sequence 所做的操作)實現(xiàn)起來可能非常復(fù)雜,需要考慮微妙的行為和許多邊緣情況。共享包可以通過大量測試和文檔來正確處理這些細(xì)節(jié),以造福所有 Swift 應(yīng)用程序。


          AsyncAlgorithms 的基礎(chǔ)能力已經(jīng)包含在 Swift 5.5 的 AsyncSequence 中。Swift 5.5 還帶來了使用自然 for/in 循環(huán)和 await 來處理 AsyncSequence 和序列等效 API(如 map 和 filter)中的值的能力。結(jié)構(gòu)化并發(fā)允許我們編寫中間狀態(tài)只是一個局部變量的代碼,try 可以直接用于拋出異常的函數(shù),并且異步代碼的邏輯與同步代碼類似。


          我們相信開源包將為這些 API 提供一個很好的歸宿。軟件包使開發(fā)人員可以靈活地跨平臺和操作系統(tǒng)版本進(jìn)行部署。開發(fā)和 API 設(shè)計將在 GitHub 和 Swift 論壇上進(jìn)行。


          簡要概覽

          該軟件包包括常用算法的 AsyncSequence 版本,例如:


          • Zip

          • CombineLatest

          • Merge

          • Chain

          • Buffer

          • Debounce

          • Throttle


          讓我們從 zip 開始。與其對應(yīng)的序列一樣,zip 生成由來自兩個不同 AsyncSequence 的值組成的元組:


          for await (number, letter) in zip(numbers, letters) {
          print(number, letter)
          }


          AsyncSequence 支持 rethrows,這意味著錯誤處理就像使用 try 一樣簡單——與任何其他 Swift 代碼一樣:


          do {
          for try await (number, letter) in zip(numbers, lettersWithErrors) {
          print(number, letter)
          }
          } catch {
          // Handle error
          }


          其他算法,如 combineLatest 和 merge 也組合了幾個 AsyncSequence 的輸出。每個都對輸出的類型和時間提供不同類型的控制。


          Sequence 和 AsyncSequence 的一個根本區(qū)別是引入了時間變量。基于 proposals to standardize Clock and Duration 這個 proposal https://github.com/apple/swift-evolution/blob/main/proposals/0329-clock-instant-duration.md ,該軟件包添加了 debounce 和 throttle 等算法。它們?yōu)槌R姴僮魈峁┖唵巍㈤_箱即用的解決方案,例如丟棄過快到達(dá)的值:


          for await value in input.debounce(for: .seconds(0.5)) {
          // Handle input, at most once per 0.5 seconds.
          }


          在有限的異步序列中等待所有值的收集通常很有用。這個包提供了初始化器,只需一行代碼即可:


          let result = await Array(input)


          async 函數(shù)對于將同步序列與 AsyncSequence 結(jié)合起來很有用。在這里,我們將它與 chain 函數(shù)一起使用來為文件的內(nèi)容添加前導(dǎo):


          let preamble = [
          "http:// This source file is part of the Swift.org open source project"
          "http://"
          ""
          ].async

          let lines = chain(preamble, URL(fileURLWithPath: "/tmp/Sample.swift").lines)

          for try await line in lines {
          print(line)
          }

          Combine

          Apple 在 iOS 13 和 macOS 10.15 SDK 中引入了 Combine 框架。從那時起,我們就有機(jī)會了解如何在現(xiàn)實場景中使用 Combine。通過 AsyncAlgorithms,我們可以應(yīng)用這些能力,并采用 Swift 的新結(jié)構(gòu)化并發(fā)特性。


          Combine API 基于 Publisher 和 Subscriber 接口,通過操作符在它們之間進(jìn)行連接。它的設(shè)計重點是提供一種以聲明方式指定這些運算符鏈的方法,在數(shù)據(jù)從一端移動到另一端時對其進(jìn)行轉(zhuǎn)換。這需要對中間狀態(tài)進(jìn)行不同的思考。有時這會導(dǎo)致調(diào)用站點比人們預(yù)期的更復(fù)雜——尤其是在處理需要共享的單個值、錯誤或數(shù)據(jù)時。async/await 的結(jié)構(gòu)化并發(fā)為我們提供了一種新的方式來表達(dá)這種邏輯。我們現(xiàn)在可以編寫異步代碼,將其分成更小的部分并從上到下讀取,而不是作為一系列鏈?zhǔn)睫D(zhuǎn)換。


          我們對 async/await 和 AsyncSequence 為語言帶來的可能性感到興奮。我們相信這個包將是探索該領(lǐng)域更高級別 API 的未來發(fā)展和演變的好地方。


          下一步是什么


          Swift 官方現(xiàn)在發(fā)布了 Swift 異步算法包的原型版本。目的是通過有效的實現(xiàn)來啟動項目,然后在 Swift 論壇上進(jìn)行詳細(xì)的設(shè)計討論。歡迎社區(qū)參與:


          • 早期采用該軟件包和對設(shè)計的反饋

          • 包的實現(xiàn)

          • 測試的實施

          • 包未來的宣傳和演變


          官方也正在使用 GitHub 問題來跟蹤錯誤、功能請求和啟動任務(wù)。


          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          點擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點這里好文分享給更多人↓↓

          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产像蕉9| 操逼一级大片 | 亚洲无码在线中文字幕 | 日本熟女性爱视频 | 天堂网91|