Quantcast
Channel: swift – AppCoda
Viewing all 172 articles
Browse latest View live

利用 Swift Generic 建置可重複使用的 UITableViewController!

$
0
0

TableView Controller 是一個不可或缺的 UIKit 元件,幾乎每個 iOS App 都會用到它來顯示列表中的數據集合。當我們想要在 UITableViewController 中顯示不同類型的數據時,通常都會創建一個新的子類來顯示相關類型的數據。這種方法可行沒錯,但如果我們的 App 中有許多不同類型的數據,則可能導致重複和維護困難。 我們如何處理和解決這個問題?其中一種方法是利用簡單抽象,透過 Swift Generic Abstract Data Type 來創建 Generic (泛型) UITableViewController 子類,這個子類可以使用 Swift […]

你可以到 利用 Swift Generic 建置可重複使用的 UITableViewController! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。


你也可以自訂搖動還原 (Shake to Undo) 的功能?一起來拆解並實作吧!

$
0
0

在 iOS 上編輯內容的時候,如果要還原或重做步驟的話,通常可以透過搖動來呼叫出一個還原的警告: 這個搖動還原 (Shake to Undo) 功能在 UITextView 或者 UITextField 等文字編輯的 view 上是內建的,但大多數其他的 view 都沒有預設實作。還好,UIKit 其實已經幫我們做好了從動作偵測到顯示警告的部分,我們只需要提供第一響應者 (First Responder),並使用它的 undoManager 就可以了。 使用系統提供的搖動還原 第一步,就是去啟用 UIApplication 單例的 applicationSupportsShakeToEdit […]

你可以到 你也可以自訂搖動還原 (Shake to Undo) 的功能?一起來拆解並實作吧! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

善用 Xcode Instruments 來最佳化程式碼 大大提高 App 效能!

$
0
0

世界上還有些頑固的人,拒絕使用如物件導向程式設計 (Object-Oriented Programming)(特別是繼承 (Inheritance) 與多型 (Polymorphism))、協定 (Protocol) 和協定導向程式設計 (Protocol-Oriented Programming)(特別是組合 (Composition))、泛型 (Generics) 與閉包 (Closures) 等技術。在意識層級上,這些頑固的人拒絕這些技術的原因,是因為他們認為這些技術會造成「巨大」的效能消耗。在潛意識中,這些頑固的人並不了解這些技術。所以,我們應該相信 Swift 的編譯器設計師,已經想 […]

你可以到 善用 Xcode Instruments 來最佳化程式碼 大大提高 App 效能! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

實作無限分頁滾動視圖 (Scroll View) 為使用者帶來更完美的體驗和設計

$
0
0

所有 App 的成功,都取決於使用者是否常用這個 App(使用者留存率高 High User Retention),而成功的使用者體驗 (UX) 和界面設計對留存率就非常重要了!在設計 App 的時候,我們需要確保使用者可以利用最小限度而直覺的操作,來達到他們的目的;而且,這操作最好是一個吸引又有趣的過程。這次的教學就是希望利用客製化 UI,來達到上述的目標。 記得從這裡下載我們的範例專案。 使用情境 在這次的範例之中,我們將會製作一個無限分頁滾動視圖 (Infinite Paging Scroll View)。就如上方的動畫一樣,這個 UI 零件適用於給使用者少數預設選項去選擇的情況。你會希 […]

你可以到 實作無限分頁滾動視圖 (Scroll View) 為使用者帶來更完美的體驗和設計 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Massive View Controller 重構:透過依賴注入 (Dependency Injection) 減輕職責

$
0
0

View Controller 可以說是 iOS 開發裡的核心物件。這不只是因為它佔據了 MVC (Model-View-Controller) 中的中心位置 Controller,還因為 UIKit 團隊有意推動場景導向的設計。UIKit 本身是以當時的 AppKit 為基礎,針對行動系統所重新設計出來的一個框架。在原本的 AppKit 裡面,MVC 基本上是以視窗為單位的,以 NSWindowController 為最主要的 Controller。但是在 UIKit 裡面,視窗的重要性被大大降低,取而代之的是一個個「場景」。場景的位階低於視窗,類似於 View,但也不是普通的 View,因 […]

你可以到 Massive View Controller 重構:透過依賴注入 (Dependency Injection) 減輕職責 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

設計多執行緒 (Multi-Threaded) App 處理連續的資料流量更有效率!

$
0
0

身為一名在汽車產業裡的 iOS 開發者,我花了不少時間處理即時資料。現今許多 App 都需要有效率地處理連續的資料流量,為了確保不會卡住使用者介面,你很可能需要使用多執行緒來開發。 處理即時的資料流量非常有趣,因為你會不斷收到可以用來更新視覺畫面的新資料。這也是開發時最困難、最令人沮喪的事情,因為 iOS 裝置有一些硬體上的限制。幸運的是,Apple 透過非常容易使用的 GCD (Grand Central Dispatch) 介面,提供多執行緒 (Multi-Thread) 功能。你可能會對下面的程式碼感到熟悉: [crayon-5c6751b8581e3798822502/] 如果沒有明確 […]

你可以到 設計多執行緒 (Multi-Threaded) App 處理連續的資料流量更有效率! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Line Chatbot: 使用 ngrok 開發 LINE 應聲蟲聊天機器人

$
0
0

大約從 2016 年 4 月開始,我們逐漸意識到,將通訊軟體(例如 Facebook Messenger 和 LINE)化身為服務入口,免開網頁、免下載 App,而聊天對象也由真人改為自動應答機器人,也許是個不錯的主意。當時 Facebook 在 F8 開發者大會上宣布將旗下的 Messenger 平台化,也就是允許聊天對象不是真人,而是一個用程式寫的、具備應答能力的服務,統稱為聊天機器人 (Chatbot)。無獨有偶的是,在台灣滲透率超高的 LINE,也在半年後 2017 年 1 月的開發者大會上,推出了更好用、更友善的第二版 Messaging API。 既然是一項服務,我們自然非常期待獲 […]

你可以到 Line Chatbot: 使用 ngrok 開發 LINE 應聲蟲聊天機器人 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Function Naming 指南:適當為函式命名 讓程式碼更簡潔清晰

$
0
0

在本篇教程中,我們將探討一個在編寫函式時經常遇到的問題:我該如何命名這個函式呢? 雖然這個問題看起來很簡單,但作為軟體開發人員,適當地命名函式對我們職涯非常重要。下文我們將會看到,適當地命名函式可以讓 code base 更清晰、更易於使用。 簡潔 API 的重要性 如果你要使用第三方套件中的函式,比如說要創建 FancyLabel,你會選擇以下哪個方法來命名函式? [crayon-5c749a2872384466226876/] 你覺得哪一個比較適合?A 還是 B 呢? 如果你還在猶豫,這邊給你一個線索:我會選擇 A。 那我為甚麼選擇 A 呢? 首先,讓我們分析一下為甚麼選項 B 不好,因為 […]

你可以到 Function Naming 指南:適當為函式命名 讓程式碼更簡潔清晰 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。


Massive View Controller 重構:Coordinator 模式與 Flow Controller

$
0
0

在上一篇文章中,我們用了依賴注入的技巧,來將 View Controller 與 Model Manager 之間的耦合解開。然而,View Controller 的依賴並不只是這樣而已,View Controller 與 View Controller 之間的依賴更為常見。 比如說,當要在 View Controller 之間傳遞資料的時候,Apple 會告訴我們要這樣寫: [crayon-5c75f5672bb06668666051/] 這樣的寫法再也普通不過。這段程式碼讓 MasterViewController 自己生成 DetailViewController,並向 DetailVi […]

你可以到 Massive View Controller 重構:Coordinator 模式與 Flow Controller 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

利用 Protocol Extension 減少重覆的 Code 大大增強 Code 的維護性

$
0
0

對任何程式開發來說,減少重覆的 code,把權責明確分開,讓 code 維護性變好,是非常重要的課題。同樣功能的 code,如果分散在程式的各個角落,不但改功能時很有可能會漏改或改錯,而且要找到某個功能確切的擺放位置也會非常困難;這些都會讓開發成本變得非常高,也會讓開發所需要的時間變得難以估計。 如果我們能把每個小元件的功能定義清楚,就有機會把重覆的部份拉出來,另外找個統一的地方擺放,在需要這些功能的時候,再簡單地連結過去,這樣開發跟維護起來,都會輕鬆很多。而在現今的軟體開發模式中,有許多方法可以做到這點,最為人所知的一個模式,就是利用繼承 (Inheritance),把會重覆利用的部份放在母 […]

你可以到 利用 Protocol Extension 減少重覆的 Code 大大增強 Code 的維護性 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

深入解析 Promises 輕鬆控制 Parallel Programming (平行程式設計)

$
0
0

並行 (concurrency) 的概念與我們日常開發工作越來越息息相關。在上兩篇文章中(Swift 平行程式設計:基礎 (Basic)、操作 (Operations)),我們已經探討過 Apple 所提供的工具。這次,我們將重點放在非官方所支援的工具上。 讓我們回顧一下: 並行 (concurrency) 是指在同一時間執行工作的能力。 想像一下,現在有一個花費時間較長的任務,它需要執行一段時間,而任務結束後我們可以得到一個結果;比如說下載檔案這樣,而圖檔就是我們的結果。在下載的同時,我們要將圖檔設置到 UIImageView 之中,那要如何實作呢? 最簡單的方法就是透過 NSURLSess […]

你可以到 深入解析 Promises 輕鬆控制 Parallel Programming (平行程式設計) 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Massive View Controller 重構: Swift Extension 整理術

$
0
0

Extension 是 Swift 裡用來延伸既有型別的東西。透過 Extension,當我們想為某個型別加功能的時候,就可以不用把新的功能寫在該型別的主體裡面。比如說,如果我們想為 Cat 增加一個 purr() 方法的時候,可以這樣寫: [crayon-5c930c6d909b5876838357/] 這種能力讓我們可以為一些碰不到原始碼的型別,加上我們自己給的功能。這也就是所謂的回顧式建模 (Retrospective Modeling)── 在不更改原本型別的前提下,去為這個型別增加功能。 雖然這感覺並不是甚麼厲害的設計模式,但其實善加運用的話,就可以大幅簡化 Massive View […]

你可以到 Massive View Controller 重構: Swift Extension 整理術 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

好好利用 Swift Protocols 簡單增進程式碼的可測試性

$
0
0

對開發者來說,讓程式碼達到高度的可測試性可以說是一大挑戰。測試是非常有用的,可以確保你撰寫的程式碼運作起來符合需求,而且在添加新功能時也不會發生問題。同時,在一個團隊裡工作時,會有很多人修改程式碼,所以確保程式碼的完整度 (integrity) 也是很重要的。 雖然測試的方式有很多,但它們都不是複雜或難用的。那為什麼很多開發者都不測試程式碼呢?主要的原因(藉口)是沒時間。我相信最大的問題是程式碼在層級、類別、以及外部框架的依賴性之間過於耦合。 在這篇文章中,我希望向大家證明,建立框架的抽象層或是解耦類別並不困難!讓我們開始吧! 情境 想像我們需要開發一個 app,它需要知道使用者的地理位置,因 […]

你可以到 好好利用 Swift Protocols 簡單增進程式碼的可測試性 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

利用 Container View Controller 拆開職責 視圖控制器不再複雜又臃腫!

$
0
0

視圖控制器 (View Controller) 這個元件提供基本構建塊,作為我們在 iOS 開發中構建 App 的基礎。在 Apple MVC 世界中,它是視圖 (View) 和模型 (Model) 之間的橋樑,充當兩者之間的協調者。控制器是一個觀察者,針對模型的更改作回應,然後更新視圖;並從使用 Target Action 的視圖接受用戶操作,然後更新模型。 (圖片來源:Apple Inc.) 身為 iOS 開發人員,即使我們使用 MVVM、MVP 或 VIPER 等架構,我們還是經常面對 Massive View Controller 的問題。有時候,視圖控制器在單一螢幕上職責過多,違反了 […]

你可以到 利用 Container View Controller 拆開職責 視圖控制器不再複雜又臃腫! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

使用 Swift 實作基於堆積的優先權佇列 大幅改善演算法的時間複雜度

$
0
0

電腦科學中存在著許多問題,而其中,使用優先權佇列 (Priority Queue) 作為底層資料結構,就可以大幅改善演算法 (algorithm) 的時間複雜度。其中一個例子就是 Dijkstra 的最短路徑演算法,該演算法就使用優先權佇列在圖形中搜尋兩個頂點之間的最短路徑。 但不幸的是,Swift 標準函式庫並沒有包含優先權佇列的實作,因此我們將深入了解如何自己實現基於堆積 (heap) 的優先權佇列吧! 為了讓你可以跟著教學操作,你可以從 Github 下載原始程式碼! 甚麼是優先權佇列 (Priority Queue) ? 優先權佇列是一種資料結構,讓物件可以有效率地透過相對優先權來排序 […]

你可以到 使用 Swift 實作基於堆積的優先權佇列 大幅改善演算法的時間複雜度 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。


擷取佈局回饋循環 (Layout Feedback Loop) 解決記憶體耗盡問題

$
0
0

試想像這樣的一個情境:你的 App 非常成功,不但有許多使用者、並有 100% 未當機率 (Crash-free rate)。你非常開心,生活也棒極了。但在某個時間點,你開始在 App Store 上看到負評,說你的 App 經常閃退;但查閱 Fabric 卻沒有新的閃退訊息出現。哪是甚麼情況呢? 答案是記憶體用盡 (OOM, Out of Memory) 而終止。 當你用完使用者裝置上的 RAM 時,作業系統可以決定為了其他處理流程,而回收記憶體並關閉你的 App。我們稱其為「記憶體用盡而終止」,有幾個原因會導致這樣的情況發生: 循環引用 (Retain Cycles) 競爭危害 (Race […]

你可以到 擷取佈局回饋循環 (Layout Feedback Loop) 解決記憶體耗盡問題 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

簡單而強大的 Drag and Drop API 讓你輕鬆建立屬於自己的 Trello App

$
0
0

當建構一個讓使用者在螢幕上移動數據的 App 時,拖放 (Drag and Drop) 就是一種很自然的使用者交互 (User Interaction)。這樣的互動方式在 Trello、Jira 等相關 App 中廣泛使用,以在版面之間移動數據。 在 iOS 11 發佈之前,以拖放互動方式來建立一個 iOS app 並不是簡單。以我過往的經驗來說,我們會要手動實作許多乏味的步驟,像是: 在想要拖動的視圖中加入長壓手勢辨識器 (recognizer)。 當使用者開始拖動時,建立一個快照視圖 (snapshot)。 當使用者在螢幕上拖動快照視圖時,處理快照視圖座標的更新。 偵測並處理使用者放開物件 […]

你可以到 簡單而強大的 Drag and Drop API 讓你輕鬆建立屬於自己的 Trello App 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

以編程方式使用 Auto Layout 讓你直覺又簡單地設計 App UI!

$
0
0

Auto Layout ㄧ直是 iOS 必學的技術之一,在 iOS 中你可以選擇使用 Storyboard 設置 Auto Layout,好處是非常直覺,而且多人使用時好懂,就算不大會 Swift / OC 都可以很容易做出想要的版面。最近公司面試需要出題,我也選擇了這個 Layout 題目。 為什麼喜歡用 Code Auto Layout? 對我而言,我比較喜歡 Code Auto Layout 表達,並且也可以常常運用 Code Auto Layout 技巧,產出比較複雜的畫面。這裡我不評斷哪個方式比較好,畢竟最合理還是應該依照專案屬性與工程師的熟悉程度來選擇。 今天要示範的畫面 今天我們 […]

你可以到 以編程方式使用 Auto Layout 讓你直覺又簡單地設計 App UI! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

初探 Flutter :使用單一程式碼輕鬆建立 iOS 及 Android App!

$
0
0

歡迎閱讀我第一篇 Flutter 教學文章。我之前從未寫過跨平台或 Hybrid App 框架的文章,不過 Flutter 改變了我的想法。 過去我用過 React Native、Cordova、Phone Gap、Ionic 來開發 App,這些對我來說真的蠻夠用的,直到我發現了 Flutter,以及其龐大的開發者社群和案例 App。 甚麼是 Flutter? 簡單來說,Flutter 是一個多層系統 (Multi-Layered System),當中較高的層級使用起來比較簡單,並讓你用較少的程式碼來呈現更多的東西;而較低的層級讓你可以控制更多的東西,但代價就是複雜性會更高。 Flutter […]

你可以到 初探 Flutter :使用單一程式碼輕鬆建立 iOS 及 Android App! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

客製化 NotificationCenter 讓你使用起來更簡單

$
0
0

觀察者模式是一個常見、而且歷史悠久的程式設計模式,而在 Swift 裡,它主要是以通知與通知中心 (NotificationCenter) 的形式存在的。簡單來說,物件可以去向通知中心註冊,成為某一種通知事件的觀察者,然後當有人向通知中心送出通知的時候,通知中心就會去找它的註冊表裡面,所有有註冊這個通知類型的觀察者,並將通知傳送給它們。 通知中心模式跟 Target-action 模式與 Delegate 模式一樣,都是 iOS 開發裡不可或缺的一部分。像是要應對軟體鍵盤彈出的話,就得要去註冊相關的通知才行。然而,它有一個很麻煩的地方是:它的 API 有點囉唆。 原本的通知中心 Notific […]

你可以到 客製化 NotificationCenter 讓你使用起來更簡單 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Viewing all 172 articles
Browse latest View live