iOS
初探 Flutter :使用單一程式碼輕鬆建立 iOS 及 Android App!
歡迎閱讀我第一篇 Flutter 教學文章。我之前從未寫過跨平台或 Hybrid App 框架的文章,不過 Flutter 改變了我的想法。 過去我用過 React Native、Cordova、Phone Gap、Ionic 來開發 App,這些對我來說真的蠻夠用的,直到我發現了 Flutter,以及其龐大的開發者社群和案例 App。 [...]
以編程方式使用 Auto Layout 讓你直覺又簡單地設計 App UI!
Auto Layout ㄧ直是 iOS 必學的技術之一,在 iOS 中你可以選擇使用 Storyboard 設置 Auto Layout,好處是非常直覺,而且多人使用時好懂,就算不大會 Swift / OC 都可以很容易做出想要的版面。最近公司面試需要出題,我也選擇了這個 Layout 題目。 為什麼喜歡用 Code Auto Layout? [...]
擷取佈局回饋循環 (Layout Feedback Loop) 解決記憶體耗盡問題
試想像這樣的一個情境:你的 App 非常成功,不但有許多使用者、並有 100% 未當機率 (Crash-free rate)。你非常開心,生活也棒極了。但在某個時間點,你開始在 App Store 上看到負評,說你的 App 經常閃退;但查閱 Fabric 卻沒有新的閃退訊息出現。哪是甚麼情況呢? [...]
使用 Swift 實作基於堆積的優先權佇列 大幅改善演算法的時間複雜度
電腦科學中存在著許多問題,而其中,使用優先權佇列 (Priority Queue) 作為底層資料結構,就可以大幅改善演算法 (algorithm) 的時間複雜度。其中一個例子就是 Dijkstra 的最短路徑演算法,該演算法就使用優先權佇列在圖形中搜尋兩個頂點之間的最短路徑。 但不幸的是,Swift [...]
利用 Container View Controller 拆開職責 視圖控制器不再複雜又臃腫!
視圖控制器 (View Controller) 這個元件提供基本構建塊,作為我們在 iOS 開發中構建 App 的基礎。在 Apple MVC 世界中,它是視圖 (View) 和模型 (Model) 之間的橋樑,充當兩者之間的協調者。控制器是一個觀察者,針對模型的更改作回應,然後更新視圖;並從使用 Target [...]
好好利用 Swift Protocols 簡單增進程式碼的可測試性
對開發者來說,讓程式碼達到高度的可測試性可以說是一大挑戰。測試是非常有用的,可以確保你撰寫的程式碼運作起來符合需求,而且在添加新功能時也不會發生問題。同時,在一個團隊裡工作時,會有很多人修改程式碼,所以確保程式碼的完整度 (integrity) [...]
iOS App 介面設計教學:如何制作表格和集合視圖的組合介面
在 iPhone 和 iPad 的很多 app 裏面,我們都會看到許多用表格視圖和集合視圖制作起來的介面,大部分應該是表格視圖和集合視圖的組合介面。比如我們在 app store 裏面的遊戲欄或者 App 欄裏面會看到由表格視圖和集合視圖組合而成的漂亮介面。 又或者,你也會在快捷指令中心、Medium [...]
Massive View Controller 重構: Swift Extension 整理術
Extension 是 Swift 裡用來延伸既有型別的東西。透過 Extension,當我們想為某個型別加功能的時候,就可以不用把新的功能寫在該型別的主體裡面。比如說,如果我們想為 Cat 增加一個 purr() 方法的時候,可以這樣寫: class Cat { func meow() { print("Meow!") } } extension [...]
深入解析 Promises 輕鬆控制 Parallel Programming (平行程式設計)
並行 (concurrency) 的概念與我們日常開發工作越來越息息相關。在上兩篇文章中(Swift 平行程式設計:基礎 (Basic)、操作 (Operations)),我們已經探討過 Apple 所提供的工具。這次,我們將重點放在非官方所支援的工具上。 讓我們回顧一下: 並行 (concurrency) 是指在同一時間執行工作的能力。 [...]
利用 Protocol Extension 減少重覆的 Code 大大增強 Code 的維護性
對任何程式開發來說,減少重覆的 code,把權責明確分開,讓 code 維護性變好,是非常重要的課題。同樣功能的 code,如果分散在程式的各個角落,不但改功能時很有可能會漏改或改錯,而且要找到某個功能確切的擺放位置也會非常困難;這些都會讓開發成本變得非常高,也會讓開發所需要的時間變得難以估計。 [...]