利用 Network.framework 在 iOS 實作簡易 HTTP 伺服器
有時候,我們會需要在自己的 app 裡架一個小型的 HTTP 伺服器。可能的理由有很多,像是要做 API 測試或者是要顯示網頁內容等等。有些 app 會內建一個網頁介面,讓使用者可以從別的裝置來存取內容,像是檔案或者影片之類的;有些開發類 app 則是需要一個內建伺服器來做測試環境。而因為瀏覽器(包括 [...]
用 iOS 內建的 ASWebAuthenticationSession 實作 OAuth 2.0 授權流程!
我們在開發 app 的時候,有時會跟 Google 或是 Instagram 等的第三方服務做連結,以提供像是存取雲端硬碟或者分享到社群等等的功能。通常這些服務商都會提供 SDK 給開發者,讓我們的 app 可以存取一些需要使用者登入的服務,但是使用服務商 SDK 有時也會有一些風險,比如說 [...]
淺談回應鏈 (Responder Chain) 讓你認識這個靈活又實用的設計模式!
在 UIKit 當中負責處理使用者動作的東西,叫做回應鏈 (Responder Chain)。回應鏈是由許多部件一起組成的一個複合元件,包括 view、view controller、window、application 等等。這些元件經由單向鏈結串列 (singly linked list) 的架構連接在一起,使得接收動作與處理動作的物件可以不用是同一個。下層的元件接收到使用者動作之後,可以選擇把動作往上層傳,讓上層的物件去攔截動作並處理(「回應」)。這樣的架構使回應鏈的變化彈性極大,隨時可以插入或移除 [...]
在 Swift 利用 Forward Pipe Operator 達成複雜的自動化流程!
在類 Unix 系統的終端機 shell 裡,有一個功能叫做管線 (pipeline),可以把A程式的輸出口與 B 程式的輸入口串接起來,使 A 與 B 變成連動的程式。 比如說,我們可以把 ls -al(把當前資料夾底下全部的檔案用列表方式列出來)跟 less(具備上下捲動功能的閱讀器)用管線串在一起,就可以用 [...]
善用 Static Factory Method 重構程式碼 讓它更流暢好讀!
在使用一個物件之前,我們經常會需要對其進行設定。比如說,使用一個 UIView 之前,有時我們會需要指定它的背景色彩等屬性: 這些設定程式碼跟其它的邏輯程式碼是相當不同的存在。它們往往只跟被設定的那個物件有關,像這裡就是只跟 view 有關,跟 ViewController [...]
用 Swift 實作 Smalltalk MVC 大幅減少資料流的複雜度!
在 Apple 開發圈,我們都很熟悉所謂的 MVC 設計模式:把整個程式裡的物件分成 Model、View 與 Controller 三種不同的角色,讓它們分別負責解決不同的問題。Model 物件專責資料的封裝與相關的基礎行為,View 物件代表使用者看得到的介面元件,而 Controller 物件負責把 [...]
詳解 Swift 各種 Type Polymorphism 找出最適合的實作方式!
Polymorphism (多型)是程式設計的基本概念之一,指同一個介面的背後可以有不同的實作。比如說在 UIKit 裡面的 UIImage,它的底層實作可能是 Core Image,也可能是 Core Graphics,但我們在 call site 通常不需要在意這些。另一個例子是 Swift 的 String,它的底層可能是 Swift [...]
善用狀態機架構 大幅簡化 View Controller !
我們常常會碰到一個 View Controller 要處理不同狀態的情況,比如說,它本身就提供了編輯與非編輯狀態。如果資料是從網路 API 抓回來的話,那可能要處理載入與錯誤狀態;如果資料缺乏內容的話,也許還要加上空白狀態。這些狀態每一個在處理的事情可能很簡單,但如果全部都丟給同一個 [...]
從零打造基本版 Combine 認識 Functional Reactive Programming
這篇文章可搭配投影片版閱讀。 Apple 平台的開發者社群對於 FRP (Functional Reactive Programming ,函數式反應式程式設計) 的接受,相對於網頁開發者來說算是晚的。即使有了 RxSwift、ReactiveSwift 等開源的 FRP 框架流行,FRP 似乎還是被社群視為是一個艱深難學、不適合一般人的概念。不過,這樣的觀感正在改變中。隨著 [...]
利用 Swift 5.1 新功能實作 Fluent Interface 讓程式碼更易讀流暢!
最近,SwiftUI 正如火如荼地在全世界進行公開測試。如果你也有經意或不經意地接觸到 SwiftUI,那你可能會發現,它在設定 View 性質的語法上,跟我們以前學過的很不一樣。 一般在設定物件的時候,我們通常是這樣寫的: 但是在 SwiftUI 裡,我們卻得這樣寫: 差別很大對不對?先不要管句型的細節,光就排版的美感來說,後者不只比前者簡潔許多,它的縮排也很清楚地告訴讀者:後面三行都是第一行的子句,重點還是在第一行。反之,前者的每一行縮排都一樣,看不出重點,而且每一句還都得重複寫一次 [...]