老司機 iOS 週報 #100 | 2020-02-10

老司機iOS週報發表於2020-02-10

老司機 iOS 週報,只為你呈現有價值的資訊。

你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。

新手推薦

? Enumerating elements in ForEach

@looping:本文介紹瞭如何通過 SwiftUI 的 ForEach 來遍歷展示列表,並對列表元素進行編號。作者記錄了對這部分程式碼進行重構優化的整個過程,使用了 key-path-based 寫法讓程式碼變得清晰易懂,是一份不錯的學習優化程式碼的材料。

? iOS中編寫高效能結構體的7個要點

@極速男孩:本文通過介紹在記憶體中一個結構體是如何被存放和使用的,來介紹在 iOS 中定義一個結構體有哪些需要注意的地方。

文章

??2019年終總結

@含笑飲砒霜:一篇遲來的年終總結,作者從5個方面概括了自己一年的收益和變化:

  • 技術&職場
  • 投資
  • 讀書
  • 生活
  • 2020 展望

讀完覺得很受觸動,時間對每個人都是有限的,但是每個人用來做的事卻不盡相同。作為技術人員,在技術道路上不斷前進之外,似乎也有必要在其他方向上多有涉獵,這是個見仁見智的問題。相信各位讀者會有自己的感受體會。

??? 用 struct 還是 class?讓 Swift-NIO 的開發者來告訴你

@五子棋:稍微瞭解 Swift 的同學都知道 Swift Community 比較推崇使用 Struct,因為它是一種值語義,可以確保你的程式不會被各種 Side Effect 造成奇怪的影響。但本文的作者在開發 SwiftNIO 的時候發現在函式傳引數的過程中 Struct 型別引數的效能要慢於 Class 型別,因此就深入研究了一番。同時,作者提出了一種 Struct 中巢狀 Class 並配合 COW 方式的設計,既能提升效能,又能維持值語義,是一篇適合 Swift 開發者的佳作。

? @

@EyreFree:Mattt 大神新作,以新手入門的視角列舉並介紹了 Objective-C 中 @ 符號開頭的一系列指令,同時對它們的設計哲學做了簡單描述(順便黑了一下 Lisp)。

參考:中文翻譯連結

?? Binary Frameworks in Swift

@四娘:PSPDFKit 從一個服務商的角度介紹了 Swift 二進位制 SDK 分發的細節,包括了 ABI 穩定的含義和開發內容,以時間線的形式給我們介紹了整個開發過程。

?? 為什麼 SwiftPM 的開發進度比 Cocoapods 慢那麼多?

@享耳先森:CocoaPods 開發者 Orta Therox 寫了篇文章分析為什麼 SwiftPM 開發速度比 CocoaPods 慢?總的來說,兩者所關注的層級不一樣:SwiftPM 需要關注全鏈路的編譯,需要支援 Linux 等系統,脫離了 Xcode;而 CocoaPods 是基於 Xcode 之上的,其產物是給 Xcode 用的,只需關注 macOS 平臺。

?再見,整潔程式碼(譯)

@JimQ:這又是一篇對“程式碼潔癖者”的“勸你三思”的文章。正如作者文中所說,對“整潔程式碼”的沉迷、好於“消除重複程式碼”,是我們大多數開發者都會經歷的階段,但作為開發者不應僅僅關注於“整潔”,還要把一切需要權衡的因素考慮在內,考慮到對團隊協作效率的影響,是否能夠應付需求變化,以及這種行為對整個工程的影響等等。

? TopLevelEncoder and TopLevelDecoder in Combine

@anotheren:在使用 Codable 這組協議時,你可能會發現已經內建於標準庫中的 JSONDecoderPropertyListDecoder 並未遵從於一個統一用於描述頂級解碼器的協議,而編解碼的起點與結果也並非僅有 Data 這一種而已。於是 Combine 中,為此定義了 TopLevelDecoderTopLevelEncoder 協議來統一描述頂級的編解碼器。本文以實際案例出發,簡述了這組協議存在的緣由。在 Swift 未來的某一個版本中,它們會以不破壞 ABI 穩定的方式加入標準庫。

程式碼

Barber

@老驢:此 framework 用了點投機取巧的方式來加快專案開發中增量編譯的速度問題,基本思路是去掉 AppDelegate,轉而為每一個大 ViewController 各自建立自己的 dependency,這樣在針對某個 ViewController 做開發的時候,可以避免小改動就導致全部重新編譯的情況。

其實個人並不是很推薦在正兒八經的專案中使用這樣的 framework,不過,這樣的思路倒是可以參考一下。

Pure-Swift-UI

@AidenRao:PureSwiftUI 是一個輔助 SwiftUI 的工具類,用於優化編寫 SwiftUI 的體驗。

  • 刪除了大量的顯示引數,通過更能表達含義的介面,將引數配置組合起來,使程式碼結構更清晰。
  • 只要你的變數是 Int,Double,Float,或者 CGFloat,PureSwiftUI 上都能混合著使用。
  • 通過修改 geometryReader 的備份 GeometryProxy,可以不影響 geometryReader 佈局。
  • offsetToPosition 修飾符,可以將 View 的位置設定為任何座標空間內的絕對位置。
  • 條件修飾符替代三目運算子,根據狀態有條件地對檢視進行樣式配置。
  • SF Symbols 使用常量,替代字串呼叫。

內推

迴響科技招人啦,求簡歷:

  • 迴響科技研發中心長期招聘 iOS 開發工程師、Android 開發工程師、Go 開發工程師/架構師、前端開發工程師,另有產品、運營、銷售等非技術部門職位也歡迎投遞!
  • 座標上海,主營業務為潮流文化產品交易平臺&社群,團隊技術氛圍良好,對新技術接受程度高,對各類能夠提升團隊開發效率的工具/方法持開放態度。
  • 簡歷以【姓名+投遞崗位+手機號】格式傳送至 eyrefree@eyrefree.org 或者直接加微信 EyreFree

老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。

如果你想找工作,點這裡:www.yuque.com/iosalliance…

如果你想招人,點這裡:www.yuque.com/iosalliance…

當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。

關注我們

我們開通了公眾號,每期釋出時公眾號(OldDriverWeekly)會推送訊息,歡迎關注。

老司機 iOS 週報 #100 | 2020-02-10

同時也支援了 RSS 訂閱:github.com/SwiftOldDri…

說明

? 表示需翻牆,? 表示編輯推薦

預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)

相關文章