付費限定

📦套件推坑:Swift Dependencies 超讚。它解決了哪些問題?

13-avatar-img
發佈於📦 推薦 Swift Package 個房間
更新於 發佈於 閱讀時間約 6 分鐘

歡迎來到「套件推坑:Swift Dependencies」系列的第一篇。從這篇文章開始,我會介紹 Swift Dependencies 這個我很愛用,且幾乎無法不使用的套件。

多年使用下來,我認為它是一個十分優秀的依賴注入套件,適合幾乎任何 iOS 專案,所以很想推坑給大家。

我會談為什麼要使用(它解決了哪些問題)、有哪些重要功能、什麼情況下使用、介紹底層實作的機制

Swift Dependencies 是由 Point-Free 團隊開發出的依賴注入的工具套件,它的語法參考了 SwiftUI 的 @Environment,並且大量運用於 TCA。不過,Swift Dependencies 可以完全獨立於 TCA 或 SwiftUI 使用。

每個實際運作的 iOS app 一定有無法控制的外部因素。舉例來說,提供地理定位服務的 app,需要使用者確認權限、裝置提供定位資訊。更簡單的例子如伺服器回傳的資料、系統時間、使用者偏好的語系、網路與藍牙連線狀況等等。

這些不可控制的因素,只能在 runtime 才能決定。開發者雖然可以事先寫好條件,但是直接讀取實際的值,很難進行測試,有些條件甚至需要重新安裝 app。反覆測試的話,非常沒有效率。

分離正式與測試環境,控制外部條件

開發者要根據條件進行不同的處理。而這些條件如果直接綁在設備或使用者的設定上,就完全無法撰寫測試,來確保各種分支的邏輯正確。

一個常見的情況,是向使用者要求某種隱私權限。根據使用者同意、不同意,要進行對應的流程。我們可以寫一個 LocationPermissionClient,把正式與測試的版本分開來實作。

正式的實作,就依照系統 API,呼叫 CLLocationManager 的方法。

測試時,我們可以在不同 test func,指定要求權限之後回傳的結果是同意、還是不同意,方便寫出對應的後續測試。

// Before: 無法測試的程式碼
if CLLocationManager.authorizationStatus() == .notDetermined {
// 要怎麼測試這個分支?
}

// After: 完全可控
@Dependency(\.locationClient) var locationClient
if locationClient.authorizationStatus() == .notDetermined {
// 測試時可以指定回傳值
}

如此一來,我們就不需要反覆手動刪除 app 重裝來重現測試條件,而是把所有外部條件都變成可控的

解決 Preview 編譯緩慢問題

許多開發者都困擾 SwiftUI 的 Preview 更新速度太慢,不堪使用。

不過,其實這往往是因為 SwiftUI 的模組同時編譯了太多不必要的外部依賴。透過合適的模組化(可參考🥇 SwiftUI + TCA 專案的模組化最佳實踐或是 iPlayground app 的程式碼),可以大幅改善 Preview 的效率。

其中關鍵就是在於把 SwiftUI 不需要編譯的外部依賴分隔開。我的工具策略就是利用今天的主角 Swift Dependencies

以行動支持創作者!付費即可解鎖
本篇內容共 2167 字、0 則留言,僅發佈於💡 實用技巧、📦 推薦 Swift Package你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
留言
avatar-img
留言分享你的想法!
avatar-img
13+
1.4K會員
80內容數
13 以 10+ 年 iOS 開發經驗為基礎撰寫,助你在 AI 時代成為更有自信的技術工作者。 ❤️ 支持 13 創作! 🤖 AI 工具實戰經驗與深度思考 🧠 軟體開發思維、職涯發展建議 💡 實用技巧與踩坑經驗分享 😔 開發者身心健康與職業傷害
13+的其他內容
2025/08/28
下載官方 App、預習活動時間表與交通資訊、提前抵達,用愉快的心情享受兩天的活動!
Thumbnail
2025/08/28
下載官方 App、預習活動時間表與交通資訊、提前抵達,用愉快的心情享受兩天的活動!
Thumbnail
2025/08/27
即使在現實中不擅長聊天,也可以享受研討會的互動。稍微做點準備即可!不論社交能力如何,這篇文章談到的準備適用於任何人。
Thumbnail
2025/08/27
即使在現實中不擅長聊天,也可以享受研討會的互動。稍微做點準備即可!不論社交能力如何,這篇文章談到的準備適用於任何人。
Thumbnail
2025/08/26
今年 iPlayground,我自告奮勇接下了 iOS app 的開發。開發背後的一些小故事,我覺得可以拿出來分享,就寫了這篇文章。
Thumbnail
2025/08/26
今年 iPlayground,我自告奮勇接下了 iOS app 的開發。開發背後的一些小故事,我覺得可以拿出來分享,就寫了這篇文章。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
本文檔介紹了在Swift中使用套件的詳細方法,包括如何引用第三方套件和自定義模組,如何創建自定義套件,以及一些常見的Swift套件。這些套件可以幫助開發者快速添加功能到項目中,提高開發效率和程式碼品質。
Thumbnail
本文檔介紹了在Swift中使用套件的詳細方法,包括如何引用第三方套件和自定義模組,如何創建自定義套件,以及一些常見的Swift套件。這些套件可以幫助開發者快速添加功能到項目中,提高開發效率和程式碼品質。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
本章節介紹了如何建立並設置Swift項目以及如何選擇和設置Swift代碼編輯器。這包括在Xcode和命令行中建立Swift項目,選擇Xcode、Visual Studio Code或AppCode作為編輯器,以及如何使用SPM安裝插件。
Thumbnail
本章節介紹了如何建立並設置Swift項目以及如何選擇和設置Swift代碼編輯器。這包括在Xcode和命令行中建立Swift項目,選擇Xcode、Visual Studio Code或AppCode作為編輯器,以及如何使用SPM安裝插件。
Thumbnail
這份文件的目的是介紹Swift語言,包括它的特性、應用範疇,以及誰在使用它。它也提供了一些學習Swift的資源和工具,以及一些常見的Swift庫和框架。
Thumbnail
這份文件的目的是介紹Swift語言,包括它的特性、應用範疇,以及誰在使用它。它也提供了一些學習Swift的資源和工具,以及一些常見的Swift庫和框架。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News