Swift 周報 #76
Swift 的 git 倉庫 這周特別忙,這里有一些 GitHub 的數據:
除了 Merge 之外,總共有 39 個作者 push 了 156 個 commit 到主分支,所有分支算起來有 284 個 commit。在主分支,401 個文件被修改,增 12589 刪 9215 …
在 WWDC 結束不久就完成了這么多的事情實屬不易,在 Swift 4 立項之后核心團隊和別的貢獻者完成了驚人的進展。
iOS 11 beat 2,tvOS 11 beta 2 和 Swift Playgrounds 2 beta 2 都開放下載了,點擊 此處下載 ,遇到 bug 記得要反饋哦!
贊助鏈接
專家帶你入門到精通只需一周時間。
Swift Unwrapped
在 第 17 集:Swift 里的測試 ,Jesse 和 JP 討論了如何使用 Swift 和相應的工具進行測試,保證每一個上線版本都井然有序。
資訊及社區
Greg Heo 寫了一篇文章 講述 Swift 里 Encoder 和 Encodable 的原理,這個新功能會影響到很多開源的軟件,了解它的原理更有助于你理解它們相關的 PR。
Matt Godbolt 的 探索編譯器 現已 支持 Swift 。(譯者注:這是一個學習編譯原理的網站,輸入代碼,就可以看到編譯后在對應平臺上的匯編碼)
David Owens 放出了一個 VSCode 的插件 ,讓 VSCode 也能支持 Swift。
Swift 支援團隊 開源 了 Swift-Evolution 的 App — Evo 。
Steven Hepting 講述 了 Swift 的 sort() 方法是怎么優化的,這里可以找到相應的 源碼 。
Learn Swift 皇后區 & Learn Swift 波蘭 , 都落下了帷幕。 這是11期 Learn Swift {城市} 系列的合集!下次會是在哪座城市呢?
Brisk,一個反饋 bug 的 macOS app 上線了 1.0 版本 ,并且快速迭代發布了 1.0.1 版本 ,記得要幫忙反饋 bug 哦!
元組門又有了更多的 進展 ,這對我來說很有趣,因為 我個人也使用過類似的方式 。就像 Slava 指出 的那樣,這件事情始終還有 優化的空間 。(譯者注:元組門就是閉包里的元組不再自動展開的事情,前兩周的周報都有提到,詳情請看 SE-0029 , SE-0066 和 SE-0110 )。
提交和合并的請求
Ben Cohen 發起一個新的 合并請求 ,讓 Substring 可以添加到 Hashable 容器里(詳情請看下面的郵件列表討論)。
Itai Ferber 通過了一個合并請求 ,修復了 SR-5277 ,讓 class 可以與父類共用一個 Encoder/Decoder。更多詳情請看這里的 討論進程 。
Philippe Hausler 通過了一個合并請求 ,修復了 SR-5292 。修復了 Foundation 里使用 slice 嵌套 slice 時產生的 bug。
Joe Groff 通過了一個合并請求 ,讓 KeyPath 支持可選鏈(Optional Chainning)和強制解包(Force Unwrapping)。
Doug Gregor 通過了一個合并請求 ,優化了基本類型,類型別名和遞歸的處理邏輯,并且修復了 SR-4295 , SR-4757 , SR-4786 , SR-5014 和 SR-4737 。
Dave Abrahams 發起一個合并請求 ,實現了 SE-0180 字符串索引越界(后面有詳細介紹)。
在命令行里運行 man swift 時展示的手冊 已獲得更新 。
Maxim Moiseev 通過了一個合并請求 ,修復了 [String] 使用 flatMap 時的向后兼容性,有興趣了解的話可以查看這里的 Swift 迷思- by Robert Widmann 。
David Farler 通過了一個合并請求 ,內容主要是 Xcode 9 里編譯時索引功能(index-while-building)在這段時間里的改進。
如果你想知道某個修復了 rdar:// 的 PR 的細節, 放心大膽地問就可以了 。
審核中的提案
SE-0180 : String Index Overhaul 在一些討論之后重新退回 審核階段 。
郵件列表
Erica Sadun 寫了一篇文章 關于 !! 這個她稱為“解包或崩潰”的操作符。你可以在 這個 Gist 里找到相應的草稿。
使用一個操作符,在解包失敗時提供反饋信息,已經成為 Swift 開發者社區里普遍會實現的一個東西了,你對于把這個廣泛使用的操作符加入到標準庫有什么想法?
譯者注:使用了 !! 的代碼會類似于這樣 let _ = optionalObject !! "空的對象" ,能夠在強制解包失敗的時候提供 debug 信息,思路很棒,建議大家看一下。
Ben Cohen 發了一篇文章 ,內容主要是關于 Substring 性能的討論。
作為 SE-0163 的要點之一, Substring 顯式轉換到 String 的問題都推遲到第一版實現之后討論。直到現在,收到的反饋也都沒有讓我們覺得這樣的顯式轉換很有必要 — 從 3.2 遷移到 4.0 的時候也不怎么需要用到 Substring 到 String 的轉換。即便不在開發目標里,只要是這方面的版本遷移問題,收到您的反饋我們都會很感謝。
[…]
Itai Ferber 在 Swift-Evolution 發了一條信息 ,征求 SE-0166 和 SE-0167 的反饋,希望社區了解到之前的很多建議已經被采納并實現,繼續提供建議和意見。
Robert Bennett 提了一個 有趣的建議 ,希望 protocol 里可以聲明 let 。但我并不認為他提的算是一個問題。
我在處理協議的時候遇上了一個惱人的問題。在一個 class 或者 struct 里使用 let 去修飾一個屬性并且在 init 方法里初始化是很常見的情況,但卻沒辦法在一個 protocol extension 里實現一個這樣的 init 方法。
[…]
最后
“索取” 有時候 比“給予”感覺更好
來自:https://swift.gg/2017/07/26/swift-weekly-issue-76/