老司機 iOS 週報 #76 | 2019-07-22

老司機iOS週報發表於2019-07-22

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

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

新聞

? ? Facebook 釋出全新 JS 引擎!專注提高 React Native 應用的效能

@CrazyCoderShi:React Native 作為老牌的跨端開發解決方案,在跨端開發技術棧中的地位一直穩如泰山,最近 Facebook 釋出了全新的 JavaScript 引擎 - Hermes,其專注於提高 React Native 應用的效能,之前一直詬病 React Native 效能問題的同學們可以試試了,小編友情提示:本次釋出的 React Native 0.60 版本還有其他驚喜。

文章

? ? SwiftUI:蘋果的一次天才嘗試

@Parsifal:作者使用 SwiftUI 構建網易嚴選的 iPad 版本後,回過頭來假設自己是 SwiftUI 設計者,來循序漸進分析 SwiftUI 是如何博眾家之長以現在的樣子亮相 WWDC19。SwiftUI 有兩個最突出的特點:基於 Swift 的 DSL 以及基於資料流驅動的程式設計正規化,文中則也是從這兩個點出發,分析了現階段流行的各類語言採取的方案,且猜測了蘋果是如何從這些方案中找到最適合 SwiftUI 的解決思路。SwiftUI 得益於 Swift 對其的全力支援,使得更容易設計出對開發者十分友好的開發體驗。

最後,作者還在對 SwiftUI 的評價中提出了一個比較有意思的觀點 - “Combine 所提倡的響應式程式設計不適合處理 UI、互動邏輯”。響應式程式設計是使用非同步資料流進行程式設計,它把從使用者觸發互動到邏輯處理再到互動反饋使用者,當做訊號源觸發的邏輯鏈路上的資料變化進行處理,而 Combine 正是蘋果借鑑了目前社群內的多種實現方案完成的為 SwiftUI 配套定製的資料管理方式。那麼蘋果最終所選擇的這種程式設計正規化,是否真的適合 SwiftUI 呢?又或者說如果不用 Combine 我們有沒有其他更合適的選擇?作者丟擲了一個很值得大家繼續討論的觀點。

關於響應式程式設計,週報編輯 JasonYu 曾寫過 - 為什麼需要 Reactive Programming? 一文,也很值得大家品味。

? [譯] 使用 Swift 5 構建 iOS 移動端群聊 App

@老峰:本文介紹了以 PubNub SDK 基於類 MQTT 的訊息訂閱釋出即時通訊協議構建匿名聊天應用的實現過程,採用 Swift 5 簡易實現了訊息實時傳送接收,儲存歷史訊息功能,感興趣的讀者可以點這裡檢視原始碼

? PubNub:為移動終端和網路應用開發提供實時資訊通訊服務,現已有 70 多個 SDK,可以支援各種 App 和服務整合進自己的網路,提供每個月一百萬條免費的訊息。

? Building a Trello-like iOS App with Drag & Drop API

@張嘉夫:AppCoda 的教程,教你如何用 Drag & Drop API 來構建一個類似 Trello 的 iOS App。如果我們想讓使用者能夠在螢幕上來回移動資料,那拖拽就是最自然的互動方式,Trello、Jira 等 app 大量採用了拖拽的互動方式。在 iOS 11 SDK 釋出之前,iOS app 的拖拽功能實現非常複雜,也很難讓體驗足夠流暢。但從 iOS 11 開始,Apple 終於在 Cocoa Touch SDK 中提供了方便使用的 Drag & Drop API。

? ? KVO在不同的二進位制中多個符號並存的Crash問題 | SatanWoo

@蓮叔:熟悉 iOS 動態庫的同學都知道,由於iOS 的機制設計,在主檔案和動態庫中是允許存在同名類的,但這個機制也有潛在的坑,既和 KVO 的機制存在衝突,導致 crash。本文作者詳細分析了這個坑的來龍去脈,並附帶介紹了很多 iOS 的 runtime 相關知識,資訊量很大,推薦閱讀。

? Swift5.0 的 Runtime 機制淺析

@AidenRao:Objective-C 的 Runtime 機制大家瞭解的比較多,而 Swift 底層原理研究文章比較少。作者通過與 OC 的對比,以及將程式執行時的彙編程式碼,翻譯成 C 語言虛擬碼,向你解析 Swift 中內部物件是如何建立的,方法以及函式呼叫又是如何實現,成員變數的訪問以及物件記憶體如何佈局。

? Better Storyboards with Xcode 11

@J_Knight_:本文介紹了蘋果在 Xcode 11 中,關於 Storyboard 的兩個改進。第一個改進是 Segue Action。在 Storyboard 跳轉之前,我們可以使用 Segue Action 來手動初始化目標控制器。第二個改進是 instantiateViewController 方法。在 iOS 13 以後,我們可以使用這個方法提供的構造 block 來實現我們的自定義控制器的建構函式。

? 如何寫出讓同事無法維護的程式碼?

@tom510230:本文舉出了大量的例子,來闡述糟糕的程式碼長得什麼樣,有以下六個部分

  1. 程式命名:糟糕的命名帶來糟糕的閱讀心情
  2. 偽裝欺詐:表面和行為不一致會讓程式碼維護性下降很多
  3. 文件和註釋:文件和註釋跟程式碼一樣需要維護
  4. 程式設計:多看看最佳實踐會讓程式碼寫起來更優雅
  5. 測試:測試先行對於程式碼質量有很大的幫助
  6. 其他

總體而言,如果以上的例子全部都避免了,那程式碼的可讀性就非常強了,讀者不妨看看自己的程式碼,有哪些地方命中了文中的 bad case ,並做出相應的修改。

工具

2019年最優秀的JIRA專案管理工具替代方案

@anotheren:專案管理是大家到一定階段後所必須面對的。本文列舉了 12 種可以替代 JIRA 的專案管理工具。如果你還沒有用過任何一種,是時候嘗試一下了。

SwiftUI-Cheat-Sheet

@水水:一個 SwiftUI 相關的一些 API 使用示例,當你使用 SwiftUI 時,可以快速獲取到相關程式碼用於參考。

XCAssetsKit

@JimQ:.xcassets 解析器,Swift 實現。.xcassets 的功能越來越強大,系統也提供了很多工廠方法去使用其中的資源,比如 UIImage(named:)。但新增的 API 無法用於舊版系統,比如 UIColor(named:),iOS 11 以下就無法使用。這個時候 XCAssetsKit 就派上用場了,它可以精準讀取 .xcassets 中的資源,用於各種自定義需求。目前已支援幾種常用的資源解析,仍在不斷完善。

程式碼

NSAttributedStringBuilder

@含笑飲砒霜:這是使用 SwiftUI 樣式語法實現的 NSAttributedString 功能,和傳統上使用 NSAttributedString 不同,現在使用 NSAttributedStringBuilder,可以使用類似 SwiftUI 的語法來宣告 NSAttributedString。除了更清晰的 NSAttributedString 語法之外,由於 NSAttributedStringBuilder 使用了函式構造器,它還允許 API 在 UIViewRepresentable 中構建元件。

Runtime

@四娘:一個基於 Metadata 的 Swift 執行時庫,可以很方便地檢視型別資訊,並且動態地呼叫屬性 getter 和 setter:

let info = try typeInfo(of: User.self)
let property = try info.property(named: "username")
let username = try property.get(from: user)
try property.set(value: "newUsername", on: &user)
複製程式碼

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #76 | 2019-07-22

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

說明

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

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

相關文章