老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
小專欄
這份文件主要基於微博 @SwiftLanguage 跟蹤過活躍於 Swift 語言領域的那些 GitHub 開源專案,順便也是對於過去幾年關注的內容進行一次系統化梳理。嘗試整理出一份相對結構化且精練的 Swift 開源專案參考知識庫,它將主要以思維導圖形式呈現。
文章
? ? Hades:移動端靜態分析框架
本文介紹了大眾點評基於 Objective-C 的程式碼靜態分析工具 Hades 的研發經驗,重點解決了以下痛點:
- 開發成本高,收益有限,研發參與積極性不夠。
- 針對區域性程式碼分析,跨編譯單元以及全域性性分析較難。
- 增量分析困難,CI 靜態檢查效率低下。
- 工具性較強,大部分只作程式碼規範檢查,應用範疇侷限。
- 接入和維護成本高,難以平臺化。
Hades 相對於市面上已有的工具,在研發端解決了程式碼檢查規則維護困難的問題,在 CI 端解決了效能問題,因為針對每次檢查都可以持久化 Model 物件,在擴充套件性上還有很大的想像空間,大眾點評團隊為我們提供了很好的程式碼靜態分析工具研發思路。目前 Hades 還是閉源階段,將來有可能轉為開源。
P.S. 目前iOS平臺上的程式碼靜態分析工具一覽表 SwiftLint Appscreener Checkmarx Fortify Infer oclint Veracode
? Swift Development with Visual Studio Code
Swift 在早些時候宣佈將支援 LSP(Language Server Protocol),整個社群都沸騰了。人們湧上街頭,奔走相告,一遍遍的確認著:我們可以擺脫 Xcode 了嗎?VSCode 作為 LSP 支援的先驅者與佼佼者,目前基本已經是行業排行第一的通用型程式碼編輯器。
本篇文章由 mattt 大神出品,詳細介紹了怎麼在 VSCode 中配置 Swift 的開發環境。目前雖然 Swift 的 LSP 支援還處於 early stage,但已經可以支援最常用的自動完成、快速幫助以及跳轉定義等功能。並且基於 VScode 強大的外掛生態,還有 SwiftLint 這樣的外掛可以來提升程式碼的風格優化。不得不說,人們對於 Swift,尤其是非 Apple 生態下的 Swift 開發體驗跨越式升級,已經發生。
? ? Xcode and LLDB Advanced Debugging Tutorial
作者準備了一個簡易專案,演示瞭如何利用 Xcode 和 LLDB 進行高階除錯。
-
第一部分 在斷點處新增除錯命令,注入一行新程式碼進行除錯。
-
第二部分 通過給屬性新增觀察點,當其變化的時候,會中斷程式,觀察到屬性變化的前後值,及可以進行堆疊追蹤。
-
第三部分 在斷點中,通過除錯命令新增新的斷點,使斷點在某些場景下才開始執行,更高效的追蹤問題。
? ? A taste of MVVM and Reactive paradigm
本文通過一些簡單的類講述了什麼是 MVC 和 MVVM,以及如何進一步研究 Rx。您可以自由地建立自己的架構,但無論您做什麼,一致性都是關鍵,不要讓別人看的時候感到困惑或驚訝。
所有設計模式的簡單原則可總結為:
- 確定應用程式的各個方面的變化,並將它們與保持不變的方面分開
- 程式設計到介面,而不是實現
- 組合好過繼承
希望本文對正在為架構選型而頭疼的朋友有所幫助。
? 實用的可選項(Optional)擴充套件
Option
是 Swift
最基礎的內容,它迫使開發者們處理好一些臨界情況,使得程式更加健壯。標準庫中 Option
的 API 非常少,編碼過程中通常需要配合 if let
guard let
一起使用,這容易造成多分支。作者參考了 Rust
Scala
等語言的實現,給出了一些 Option
擴充套件,或許你可以用於自己的專案中。
? ? Stubbing in pair with Swift compiler
Unit tests 中 stubbing 是一個很常見的做法,現在也有很多成熟的框架。而本文卻從另外一個角度來做: 利用 Swift 的語言特性來做另類的輕量級的 Stubbing。 這種做法的應用面雖然比較有限,但是不妨可以瞭解一下作為參考。
? 關於 performSelector:afterDelay: 的一個坑及思考
本文通過對於 performSelector:afterDelay:
函式進行了研究,總結了以下三點內容:
- 在一個沒有開啟
RunLoop
的子執行緒中呼叫performSelector:afterDelay:
函式,最終是不會被執行的 - 看似相近的 API,可能不是同一個模組提供的,其實現方式也不盡相同
performSelector:
來自於NSObject.h
,其是有 id 型別的返回值,並不依賴於子執行緒的RunLoop
開啟狀態performSelector:withObject:afterDelay:
來自於NSRunloop.h
,其並沒有返回值,依賴子執行緒的RunLoop
開啟狀態performSelectorOnMainThread:withObject:waitUntilDone:
來自於NSThread.h
,其並沒有返回值,依賴主執行緒的RunLoop
開啟狀態
performSelector:
中函式定義在其他地方就會引起編譯警告,如果函式沒有返回值可以使用performSelectorOnMainThread:
或者performSelector:withObject:afterDelay:
來避免編譯警告
? 函數語言程式設計 - 有趣的 Monoid(單位半群)
本文介紹了在函數語言程式設計中比較核心的一個概念 Monoid(單位半群)。從半群到單位半群,從數學定義到 Swift 的展開實現,以引導教學的方式帶領讀者一步步深入瞭解 Monoid,極易消化理解。後半部分介紹了幾個有趣實用的 Monoid 類的資料結構,且都有遞進式的概念講解及 Swift 實現。
另外,本文是近兩年來作者關於函數語言程式設計系列文章中的最新一篇。本系列文章同樣都是採取引導遞進式的行文風格,作者從 Haskell 這種標準化的、通用純函式式的程式語言中汲取靈感,將諸多函數語言程式設計的核心概念改造為 Swift 實現,讓我們從新的角度去認識 Swift 以及 與 Swift 相關的函數語言程式設計思想,Swift 或 函數語言程式設計愛好者不容錯過。
? Unit testing retain cycles
迴圈引用問題會造成記憶體洩露,輕則影響應用效能,重則導致應用閃退,非常影響使用者體驗。同時它也是不太容易被發現的。所以在開發測試過程中,增加對迴圈引用的檢測很有必要。
本文就介紹瞭如何在單元測試中檢查迴圈引用。思路很簡潔,通過建立弱引用去檢測。這樣我們就能保證程式碼庫本身沒有問題,正如文末所說的 “get a level of comfort”。除了檢測方式,作者所表現出的這種為程式碼負責任的態度也是值得我們學習的。
? Self-sizing Table View Cells
這是一個關於 tableview cell 的佈局教程,該本教程中,您將學習如何啟用自動調整大小的 cell ,以及如何使它們按需調整大小並支援動態型別。該教程通過 storyboard 加程式碼的教程形式,一步步完成一個大家常見的 tableview 需求,並附上了專案 demo 。
? Extending optionals in Swift
Swift 裡的 Optional 雖然幫助我們保證了記憶體安全訪問,但在很多情況下都需要我們解包後再進行操作,讓程式碼顯得比較囉嗦而且不連貫。
Sundell 這周就給我們帶來了 Optional 的實用擴充,總結了一些 Optional 常見場景,並且構建對應的語法糖去優化 Optional 的使用。
? Swift Async Operations at Your Command
當一個操作相對比較複雜時,使用 Operation 封裝上下文會是一種比較合理的做法,這篇文章裡作者分別介紹了 Fabric 封裝的 FABAsyncOperation 和 FABCompoundOperation 以及各自的使用場景,並且講述了他在專案中使用 Swift 重寫的過程。
? 關於 Swift defer 的正確使用
在 Swfit 中,defer 關鍵字即為延遲的意思,用 defer 宣告的 block 並不會立刻執行,而是在當前程式碼執行退出後被呼叫,這類似於 JAVA 裡的 try/finally。最近,喵神在重構 Kingfisher
的時候,因為 defer 的使用不但而造成了 bug。為此,喵神完整梳理了下 defer 的特性以及使用方法。
程式碼
30-seconds-of-swift-code
一個立志於讓你 30 秒看懂一段 Swift 程式碼的專案,較為新手向,方便新人快速瞭解 Swift 的內建函式。當然老鳥也不妨一讀,總有你漏掉的知識點。
LINE SDK for iOS Swift
用 Swift 開發的 iOS LINE SDK 可以讓我們用現代化的方式來實現 LINE API,包括使用者認證及通過 OpenID 獲取使用者資訊等功能,為 iOS app 開發有吸引力的、個性化的使用者體驗。
內推
-
北京-百度網盤 持續招 iOS 開發:社招、應屆、實習均可。專案在技術上很有挑戰性,團隊技術氛圍極好。誠心希望各路大神前來切磋,也歡迎計算機基礎好的小白來共同學習。簡歷發郵箱 xuyafei01@baidu.com,暫不考慮的也歡迎微博私信 @小非86 聊聊~
-
北京-螞蟻金服 招iOS/安卓/前端開發:負責支付寶會員及帳號業務線,地點北京國貿,金臺夕照地鐵站出口 100 米。有興趣的同學歡迎將簡歷傳送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一個郵箱)或者微博私信 @折騰範兒_味精 瞭解情況。
-
上海即刻:如果你認識聰明勤奮、膽大心細、有追求的工程師,那就來加入我們吧!任何推薦或簡歷可直接發給 Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh。
-
杭州奇志科技招聘 iOS、前端:奇志科技自 2016 年起通過行業無人機協同工作流 Mesh 進入物聯網與人工智慧領域, 併成功為房地產、建築、測繪、電力巡檢等行業提供無人機解決方案。感興趣可以微博上私信 @沒故事的卓同學 瞭解。
-
深圳位元組跳動研發中心誠招各路 iOS 好手一起做取悅自己的專案:如想了解更多深圳頭條的資訊,可以加小T微信:tomtan,切磋技術和聊情懷都可以喔~~~~
-
北京位元組跳動 iOS 團隊持續招人中:簡歷可以傳送到郵箱 raozhizhen@gmail.com,或者新增我(@AidenRao)的微信 jingmu1994 瞭解更多公司及崗位資訊。
-
北京百度教育事業部招 iOS 開發:百度教育事業部,地點:北京西二旗。部門下面有百度閱讀,百度文庫,百度愛聽等 App 產品。團隊技術氛圍濃厚,有興趣的同學歡迎將簡歷傳送到我的郵箱:lizelei@baidu.com。
關注我們
我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
本期編輯
@四娘,@享耳先森,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,@kyo,@tom510230,@anotheren,@水水,@looping,@老老老老老老老驢,@邦Ben,@紅紙,@含笑飲砒霜,@JimQ
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)