iOS
Massive View Controller 重構:Coordinator 模式與 Flow Controller
在上一篇文章中,我們用了依賴注入的技巧,來將 View Controller 與 Model Manager 之間的耦合解開。然而,View Controller 的依賴並不只是這樣而已,View Controller 與 View Controller 之間的依賴更為常見。 比如說,當要在 View Controller 之間傳遞資料的時候,Apple 會告訴我們要這樣寫: [...]
Function Naming 指南:適當為函式命名 讓程式碼更簡潔清晰
在本篇教程中,我們將探討一個在編寫函式時經常遇到的問題:我該如何命名這個函式呢? 雖然這個問題看起來很簡單,但作為軟體開發人員,適當地命名函式對我們職涯非常重要。下文我們將會看到,適當地命名函式可以讓 code base 更清晰、更易於使用。 簡潔 [...]
Line Chatbot: 使用 ngrok 開發 LINE 應聲蟲聊天機器人
大約從 2016 年 4 月開始,我們逐漸意識到,將通訊軟體(例如 Facebook Messenger 和 LINE)化身為服務入口,免開網頁、免下載 App,而聊天對象也由真人改為自動應答機器人,也許是個不錯的主意。當時 Facebook 在 F8 開發者大會上宣布將旗下的 Messenger 平台化,也就是允許聊天對象不是真人,而是一個用程式寫的、具備應答能力的服務,統稱為聊天機器人 [...]
Massive View Controller 重構:透過依賴注入 (Dependency Injection) 減輕職責
View Controller 可以說是 iOS 開發裡的核心物件。這不只是因為它佔據了 MVC (Model-View-Controller) 中的中心位置 Controller,還因為 UIKit 團隊有意推動場景導向的設計。UIKit 本身是以當時的 AppKit 為基礎,針對行動系統所重新設計出來的一個框架。在原本的 AppKit 裡面,MVC [...]
實作無限分頁滾動視圖 (Scroll View) 為使用者帶來更完美的體驗和設計
所有 App 的成功,都取決於使用者是否常用這個 App(使用者留存率高 High User Retention),而成功的使用者體驗 (UX) 和界面設計對留存率就非常重要了!在設計 App 的時候,我們需要確保使用者可以利用最小限度而直覺的操作,來達到他們的目的;而且,這操作最好是一個吸引又有趣的過程。這次的教學就是希望利用客製化 [...]
善用 Xcode Instruments 來最佳化程式碼 大大提高 App 效能!
世界上還有些頑固的人,拒絕使用如物件導向程式設計 (Object-Oriented Programming)(特別是繼承 (Inheritance) 與多型 (Polymorphism))、協定 (Protocol) 和協定導向程式設計 (Protocol-Oriented Programming)(特別是組合 (Composition))、泛型 (Generics) 與閉包 (Closures) 等技術。在意識層級上,這些頑固的人拒絕這些技術的原因,是因為他們認為這些技術會造成「巨大」的效能消耗。在潛意識中,這些頑固的人並不了解這些技術。所以,我們應該相信 [...]
你也可以自訂搖動還原 (Shake to Undo) 的功能?一起來拆解並實作吧!
在 iOS 上編輯內容的時候,如果要還原或重做步驟的話,通常可以透過搖動來呼叫出一個還原的警告: 這個搖動還原 (Shake to Undo) 功能在 UITextView 或者 UITextField 等文字編輯的 view 上是內建的,但大多數其他的 view 都沒有預設實作。還好,UIKit 其實已經幫我們做好了從動作偵測到顯示警告的部分,我們只需要提供第一響應者 [...]
利用 Swift Generic 建置可重複使用的 UITableViewController!
TableView Controller 是一個不可或缺的 UIKit 元件,幾乎每個 iOS App 都會用到它來顯示列表中的數據集合。當我們想要在 UITableViewController 中顯示不同類型的數據時,通常都會創建一個新的子類來顯示相關類型的數據。這種方法可行沒錯,但如果我們的 App 中有許多不同類型的數據,則可能導致重複和維護困難。 [...]
First Responder 教程:如何使用函式快速取得第一響應者?
在寫 iOS app 的時候,我們偶爾會碰到需要用到第一響應者 (First Responder) 的狀況。比如說,當我們想要把內容貼到它上面,或者要它執行復原、重做等動作的時候。然而,Apple 官方並沒有公開可以直接取得第一響應者的 API,只提供了 isFirstResponder 這樣一個屬性讓我們去檢查某個響應者是不是第一而已。那麼,如果我們不知道誰會是第一響應者的話 [...]
Swift Class vs Struct:設計 Model 時,該用 Struct 還是 Class 呢?
用 Swift 寫 app 的時候,我們通常會在一開始就碰到一個問題:我們的 App model 應該宣告成 struct 還是 class 好? 比如說,假設我們在開發一個通訊錄 app,而我們確定要建立一個叫做 Contact 的型別來代表每筆通訊資料,且它需要有 var name: String 跟 var phoneNumber: String [...]