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

利用 Network Framework 輕易監控網路狀態變化

$
0
0

大家好,歡迎閱讀本次教學。毫無疑問,所有與伺服器交換資料的 App,都需要知道一件事情:它們是否已連接到網路。當處於離線時,我們通常需要更改使用者體驗,並更新使用者介面,以反映出 App 無法執行網路操作。此外,即使 App 已經連上了網路,我們還是需要了解連線的類型(像是無線網路或行動網路)。沒有人會想在不知情的情況下,使用一個以行動網路讀取大量資料的 App,畢竟這可能導致使用者在流動網絡上有額外支出。使用者應該能夠依據自己的意願,開啟或關閉這個功能。 值得慶幸的是,隨著 Apple 在 iOS 12 提供了 Network 框架 (Network Framework),要取得所需資料來決 […]

你可以到 利用 Network Framework 輕易監控網路狀態變化 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。


SwiftUI & PromiseKit:讓 Alert 樣式統一又可復用  打破彈出視窗的惡夢

$
0
0

開發 iOS 的過程中,常常會有彈出 Alert 讓使用者選擇的需求,又需要知道使用者選擇了哪一個,卻遇到各種彈出都要一直callback callback 嗎?每次選項都很難掌握,多個選項還要自行客製化,也很難復用,只能一個畫面刻一個? 在本篇教學文章中,我們會了解到幾個要點並實作: 建立統一入口 Alert 服務化,讓任何地方需要顯示與選擇時,都能輕易掌握使用呼叫。 客製化領域設計選項 (enum),不管是哪種商業邏輯都能很簡單地讓使用者做選擇,並且輕易掌握使用者選擇後的事件回應。 Alert 服務自動讀取 enum 選項,並建置 UI Button 列表。 脫離傳統 UIAlertCon […]

你可以到 SwiftUI & PromiseKit:讓 Alert 樣式統一又可復用  打破彈出視窗的惡夢 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

SwiftUI 小技巧:利用 Stack 簡單構建彈性的卡片視圖

$
0
0

歡迎閱讀 SwiftUI 小技巧系列教程!在這篇文章中,我們將實作一個常見的手機 UI 設計 —— Card UI。SwiftUI 框架讓我們輕易構建 App UI,我們會在文章中展示這一點。你將會看到我們可以使用堆疊 (stack)、圖像、和文本視圖,來像這樣創建卡片視圖 (card view)。 請注意,本篇教程需要你在 macOS Catalina (v10.15)上運行 Xcode 11。 建立一個卡片式的 UI 如果你還沒有開啟 Xcode,請打開它,並使用 Single View Application 模板來建立一個新專案。在下一個畫面,設定專案名稱為 SwiftUIScroll […]

你可以到 SwiftUI 小技巧:利用 Stack 簡單構建彈性的卡片視圖 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Compositional Layout 詳解 讓你簡單操作 CollectionView!

$
0
0

隨著手機 App 介面和硬體的不斷進化,現在 App 介面的複雜度已經跟以往不能同日而語了。以前的 UI 可能就是一個簡單的 TabelView,把所有資訊都一視同仁地列出來,上面也不太會有甚麼複雜的互動,就程式的撰寫上,一個或兩個 UICollectionView 就有辦法滿足大部份的需求。還記得很久以前的 AppStore 嗎?它就是一個簡單的列表,沒有任何花俏的功能。 2008 年的 AppStore(圖片來源:Apple Newsroom) 到了今天,因為在手機上瀏覽內容的需求大增,YouTube 或 Neftflix 等服務都開始著重在手機原生的瀏覽體驗。而列表的設計,也從簡單的垂直 […]

你可以到 Compositional Layout 詳解 讓你簡單操作 CollectionView! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

利用 CocoaPods 及 GitHub  一步步創建可重用的函式庫!

$
0
0

歡迎回到我們的教學系列文章!在上一篇教學文章中,你學到了如何使用 Network 框架來偵測及監控網路狀態。看來這個框架在 NetStatus 類別中運行得相當不錯,所以讓我們更進一步,來創建一個基於 NetStatus 類別的小型、開源框架吧!在本篇教學中,我們將透過 CocoaPods 來創建一個 pod,讓這個框架容易發佈及整合,並把它推送到 GitHub 上。 要在多個專案中重複使用 NetStatus 是非常簡單的。而且,將來你希望創建的任何自定義框架,都可以依照接下來所教的方式來實現。 備註: 如果你還沒有看過之前的教學文章,我強烈建議你可以先去閱讀一下。如果你只是想要學習如何創建 […]

你可以到 利用 CocoaPods 及 GitHub  一步步創建可重用的函式庫! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

詳解 Swift 各種 Type Polymorphism 找出最適合的實作方式!

$
0
0

Polymorphism (多型)是程式設計的基本概念之一,指同一個介面的背後可以有不同的實作。比如說在 UIKit 裡面的 UIImage,它的底層實作可能是 Core Image,也可能是 Core Graphics,但我們在 call site 通常不需要在意這些。另一個例子是 Swift 的 String,它的底層可能是 Swift 原生的也可能是從 NSString 橋接過來的,但它們表面上的介面都是一樣的。如此一來,開發者就不用針對每種實作去寫不同的程式碼,而只要操作一個統一的介面就好了。 Polymorphism 主要可以分成 ad hoc polymorphism、parame […]

你可以到 詳解 Swift 各種 Type Polymorphism 找出最適合的實作方式! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

ViewController 轉場初階指南:簡單打造酷炫的轉場動畫

$
0
0

今天,我們會客製由一個視圖控制器 (ViewController) 轉場到另一個的轉場動畫。 為什麼會想要寫這個主題呢?過去,我花了很多時間去了解視圖控制器之間的轉換。遺憾的是,目前線上鮮有能簡單說明視圖控制器動畫轉場的教程。 因此,我決定寫幾篇文章,教大家用最簡單的方法,創建令人驚艷的轉場動畫。 讓我們開始來創建客製化的 UINavigationController 轉場動畫吧! 先看一下我們最後的成果: 專案 讓我們先花點時間來了解這個專案和以下元素: MainViewController.swift:主視圖控制器,你將會在這裡呈現 CollectionView,並推向 PushedVie […]

你可以到 ViewController 轉場初階指南:簡單打造酷炫的轉場動畫 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

ViewController 轉場進階指南:進一步創建絢麗的轉場動畫

$
0
0

今天,我們會客製由一個視圖控制器 (ViewController) 轉場到另一個的轉場動畫。 為什麼會想要寫這個主題呢?過去,我花了很多時間去了解視圖控制器之間的轉換。遺憾的是,目前線上鮮有能簡單說明視圖控制器動畫轉場的教程。 因此,我決定寫幾篇文章,教大家用最簡單的方法,創建令人驚艷的轉場動畫。而這篇文章會比前一篇更進階。 讓我們開始來創建客製化的 UINavigationController 轉場動畫吧! 先看一下我們最後的成果: 專案 讓我們先花點時間來了解這個專案和以下元素: MainViewController.swift:主視圖控制器,你會在這裡看到 fadeIN 或 fadeOu […]

你可以到 ViewController 轉場進階指南:進一步創建絢麗的轉場動畫 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。


用 Swift 實作 Smalltalk MVC 大幅減少資料流的複雜度!

$
0
0

在 Apple 開發圈,我們都很熟悉所謂的 MVC 設計模式:把整個程式裡的物件分成 Model、View 與 Controller 三種不同的角色,讓它們分別負責解決不同的問題。Model 物件專責資料的封裝與相關的基礎行為,View 物件代表使用者看得到的介面元件,而 Controller 物件負責把 Model 物件與 View 物件連結在一起(參考資料:Apple Developer Documentation Archive)。它們之間的互動關係也被定義得很清楚:以 Controller 為核心去操控 View 與 Model 物件,並接收它們的通知。View 與 Model 物件之 […]

你可以到 用 Swift 實作 Smalltalk MVC 大幅減少資料流的複雜度! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

善用 Static Factory Method 重構程式碼 讓它更流暢好讀!

$
0
0

在使用一個物件之前,我們經常會需要對其進行設定。比如說,使用一個 UIView 之前,有時我們會需要指定它的背景色彩等屬性: 這些設定程式碼跟其它的邏輯程式碼是相當不同的存在。它們往往只跟被設定的那個物件有關,像這裡就是只跟 view 有關,跟 ViewController 無關。所以,要重構它們也是相對上簡單的。比如說,我們可以直接把它們包裝成一個 ⋯⋯ 自由函數工廠方法 我們把工廠方法寫成一個 private 的自由函數,因為這樣可以防止它去存取 ViewController 的任何屬性或方法。而在 ViewController 裡,我們也只需要一行程式碼就可以取用已經設定好的 UIVie […]

你可以到 善用 Static Factory Method 重構程式碼 讓它更流暢好讀! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

簡單解決 Xcode 11.3 的 Bug:無法把間距約束設為零?

$
0
0

如果你已經把 Xcode 升級到 11.3 版本,你會發現當你使用 Interface Builder 創建 App UI 時,無法將間距約束條件 (spacing constraints) 的值設置為零。你可以打開 Interface Builder,然後點擊 “Add new constraints” 來試試看,將其中一個約束條件設置為 0 後,它卻自動將其恢復為 standard。 針對這個問題,我們收到很多讀者的提問。不用擔心!這不是你的錯,而是 Xcode 11.3 的一個 bug。根據 Xcode 11.4 的 release note,這個 bug 很快就 […]

你可以到 簡單解決 Xcode 11.3 的 Bug:無法把間距約束設為零? 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

SwiftUI 教學:認識手勢 (Gestures) 和 @GestureState

$
0
0

如果你曾試過使用 SwiftUI 框架,你可能已對手勢操作有初步認識。最常見的,就是用 onTapGesture 修飾器來處理使用者的觸控並做出相對的回應。此教學,我們將會深入來看如何在 SwiftUI 中處理不同的手勢。 這個框架提供幾個內建手勢,像是之前用過的點按 (tap) 手勢。不止這些,還有像 DragGesture、 MagnificationGesture 與 LongPressGesture 是一些可以馬上使用的手勢。我們會看幾個手勢,並看看如何在 SwiftUI 中處理它。此外,你將學會如何建立一個可以支援拖曳手勢的通用視圖。 手勢修飾器的使用 要使用 SwiftUI 框架辨 […]

你可以到 SwiftUI 教學:認識手勢 (Gestures) 和 @GestureState 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Swift Package 實用指南 讓你有效率地重複使用元件!

$
0
0

歡迎來到新的教學文章,我將會告訴你建立自己的 Swift packages 的實作方式。Swift Packages 包含了不同的程式碼,不管是能夠在專案內重複使用的、能分享給其他開發者的、及可以作為專案的相依套件 (dependency) 的。自 Xcode 11 起,Apple 已經把建立及管理 Swift Package 的功能整合進 Xcode 中,讓開發者得以快速並直接地處理這些過程。 Package 主要由兩個部分組成:第一個部分是原始程式碼,也是它的核心;而另一個部分就是名為 Package.swift 的 manifest 檔案,這個檔案是 package 設定的地方。一個 p […]

你可以到 Swift Package 實用指南 讓你有效率地重複使用元件! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

iOS App 環境管理 : 靈活運用 Xcode Scheme、GitLab 和 Fastlane 設置不同的開發環境

$
0
0

真正產品化的 App,通常都有不同的環境與配置,包括環境資訊與後端不同環境的位置,上線後測試功能分流,一般實驗時可以很容易上手 CI/CD,但在實戰中可能需要更加複雜且靈活的設置。讓我們來看看,這些配置在實戰中是甚麼樣子!你可以在這裡參考原始碼。 在專案準備中,我們使用 GitLab 來實作。我們透過 GitLab CI/CD,完成產品 App 中的 CI/CD Pipeline 流水線的建置,然後建立一個新的 App 當作我們產品的標的(即模擬實戰中正在開發產品),並且分出各個環境來代表實戰中的項目環境。同時,配置 fastlane 在我們將程式碼推送到 GitLab 執行,它會幫我們在不同 […]

你可以到 iOS App 環境管理 : 靈活運用 Xcode Scheme、GitLab 和 Fastlane 設置不同的開發環境 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

SwiftUI 教學:運用不同 UI 元件 輕鬆建立一個電影預告片 App

$
0
0

Apple 在 WWDC19 介紹了最新的開發框架,其中之一就是 SwiftUI 以及 Combine。如果你還沒有知道這個消息,簡單來說,SwiftUI 是一種新的方法,讓我們可以藉由宣告方式來創建 UI;而 Combine 是與它一起使用的,Combine 提供了宣告式 Swift API,以處理像是 UI 或是 Network 事件的值。 如果你是剛接觸 SwiftUI,我推薦你可以閱讀這篇文章來瞭解它的基礎概念。 在這次的專案之中,我們將會應用 SwiftUI,來建立一個電影預告片 App。 在建立這個 App 的過程之中,我們可以學習到: 如何從資源檔案載入 JSON 數據 如何使用 […]

你可以到 SwiftUI 教學:運用不同 UI 元件 輕鬆建立一個電影預告片 App 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。


簡單解釋 Any 與 AnyObject 的差別 讓你快速掌握這兩個概念!

$
0
0

每次編寫程式碼時,我們都會處理實例 (instance) 或類型 (type)。在非特定型別的情況下,我們會選擇 Any 或 AnyObject。 Any 和 AnyObject 的差別 Any:它可以代表任何型別的類別 (class)、結構 (struct)、列舉 (enum),包括函式和可選型別,基本上可以說是任何東西。 AnyObject:它指的是類別的任何實例。這只在使用參考型別 (reference type) 時,才能派上用場。這就相等於 Objective-C 中等的 ‘id’。 如果你的字典只會在 Swift 程式碼中使用,你就應該使用 Any,因為你的型別 (Int、Doub […]

你可以到 簡單解釋 Any 與 AnyObject 的差別 讓你快速掌握這兩個概念! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

在 Swift 利用 Forward Pipe Operator 達成複雜的自動化流程!

$
0
0

在類 Unix 系統的終端機 shell 裡,有一個功能叫做管線 (pipeline),可以把A程式的輸出口與 B 程式的輸入口串接起來,使 A 與 B 變成連動的程式。 比如說,我們可以把 ls -al(把當前資料夾底下全部的檔案用列表方式列出來)跟 less(具備上下捲動功能的閱讀器)用管線串在一起,就可以用 less 去閱讀檔案列表了: 在這行命令當中,| 就是所謂的管線運算子,把前面程式的標準輸出 (stdout) 傳遞給後面程式的標準輸入 (stdin)。ls -al 的標準輸出就是檔案列表的文字,而 less 就會讀取這些文字並顯示出來。 透過管線運算子,我們可以把好幾個命令列程式 […]

你可以到 在 Swift 利用 Forward Pipe Operator 達成複雜的自動化流程! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

iOS 13 Dark Mode 教學:為 App 配置 Dark Mode 讓使用者體驗更進一步

$
0
0

簡介 我想你都已經聽說過 iOS 13 的深色模式 (Dark Mode),就是使用者介面顏色變暗的模式。這可以改善光線不足時的可見性,並減少 App 的能源消耗(深色消耗的電量少於淺色)。 雖然某些 App 已經在介面中包含了深色模式,但是直到發佈 iOS 13 和 iPadOS 後,深色模式才被放進裝置本身的配置中。要更改為深色模式,我們要到設定 > 螢幕與亮度,然後選擇深色。 配置 App 的深色模式 為了讓 App 使用深色模式,我們必須使用 Xcode 11 和 iOS 13。此外,我們必須修改 App 中使用的顏色和圖像。 使用自適應顏色 這邊,我們應該使用自動適應介面樣式的 […]

你可以到 iOS 13 Dark Mode 教學:為 App 配置 Dark Mode 讓使用者體驗更進一步 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

淺談回應鏈 (Responder Chain) 讓你認識這個靈活又實用的設計模式!

$
0
0

在 UIKit 當中負責處理使用者動作的東西,叫做回應鏈 (Responder Chain)。回應鏈是由許多部件一起組成的一個複合元件,包括 view、view controller、window、application 等等。這些元件經由單向鏈結串列 (singly linked list) 的架構連接在一起,使得接收動作與處理動作的物件可以不用是同一個。下層的元件接收到使用者動作之後,可以選擇把動作往上層傳,讓上層的物件去攔截動作並處理(「回應」)。這樣的架構使回應鏈的變化彈性極大,隨時可以插入或移除 view 或 view controller 等的節點,卻還是保有它的整體性。 回應鏈是 […]

你可以到 淺談回應鏈 (Responder Chain) 讓你認識這個靈活又實用的設計模式! 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Swift 教學:認識 Higher Order Functions 高階函數(Reduce 和 FlatMap)

$
0
0

歡迎來到這篇有趣的新程式教學文章!Swift 是種富含多種特性的語言,當中有一個不能錯過的良好特性,就是高階函數 (higher order functions)。根據 Wikipedia 上面的解釋所描述: 在數學和計算機科學中,高階函數是至少滿足下列其中一個條件的函數: - 接受一個或多個函數作為輸入- 輸出一個函數 所有其他函數皆為一階函數 從現實世界程式設計的實際觀點來看,高階函數是百利而無一害的工具。我們不必實作 Swift 中已有的功能,而且可以透過更少程式碼完成同樣的功能。高階函數通常會應用在集合型別(陣列 (arrays)、字典 (dictionaries)、集合 (sets) […]

你可以到 Swift 教學:認識 Higher Order Functions 高階函數(Reduce 和 FlatMap) 閱讀完整文章。如果你對其他iOS教程有興趣,歡迎到 AppCoda 繼續瀏覽。

Viewing all 172 articles
Browse latest View live