Swift 註解

本教程屬於Swift系列教程。 在 Swift 中,註解可以有兩種形式:單行註解和多行註解。 單行註解的語法如下: //這是一個註解 它可以放在程式碼的行尾: let a = 1 //這是一個註解 多行註解使用以下語法: /* 這是一個多行註解 */ 在 Swift 中,可以嵌套多行註解: /* 這是一個 /* 嵌套的 */ 多行註解 */ 這在對已經包含多行註解的大塊程式碼進行註解時非常方便。

Swift 集合

這篇教程屬於 Swift 系列 集合(Sets)用於創建不重複項目的集合。 雖然數組可以包含多個相同項目,但集合中只包含唯一的項目。 你可以用以下方式聲明一個包含整數值的集合: let set: Set<Int> = [1, 2, 3] 或者你可以用數組初始化集合: let set = Set([1, 2, 3]) 使用 insert() 方法將項目添加到集合中: var set = Set([1, 2, 3]) set.insert(17) 與數組不同,集合中並沒有順序或位置。項目的擷取和插入是隨機的。 將集合的內容按照順序打印的方法是將其轉換為數組,並使用 sorted() 方法: var set = Set([2, 1, 3]) let orderedList = set.sorted() 要檢查集合是否包含一個元素,可以使用 contains(_:) 方法: var set = Set([1, 2, 3]) set.contains(2) // true 要獲取集合中的項目數量,使用 count 屬性: let set = Set([1, 2, 3]) set.count // 3 如果集合為空,其 isEmpty 屬性為 true:...

Swift 運算子的先行順序和結合性

本篇教程屬於 Swift 系列教程之一 想像一下這個運算式: let amount = 1 + 2 * 3 根據 1 + 2 和 2 * 3 的計算順序的不同,amount 的值可能會截然不同。 計算順序是由運算子的先行順序決定的。根據先行順序,最常見的運算子排序如下: 乘法 (*)、除法 (/)、餘數 (%) 加法 (+)、減法 (-) 比較 (==, !=, <, >, <=, >=) 邏輯與 (&&) 和 邏輯或 (||) 三元條件 (?:) 賦值運算符和複合賦值運算符 (=, += 等等) 這意味著上述運算式首先計算乘法,然後再計算加法: let amount = 1 + 2 * 3 // = 7 完整的先行順序表格可以在 https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations 找到。 如果在一個表達式中有多個具有相同先行順序的運算子,我們使用運算子的結合性來確定哪個運算子擁有優先權。 例如,考慮下面的例子: let amount = 4 / 2 * 5 根據我們是先執行 4 / 2 還是 2 * 5,結果可能是 10 或 0....

Swift 模組

你在檔案中編寫軟體。 一個簡單的程式可能只會存在於單一個檔案中,但是複雜的程式則會寫在多個檔案之中。 Swift 提供了一種將多個檔案分組的方法,稱為 模組。 模組可以幫助我們做兩件事情:代碼複用和代碼封裝。 你只需將特定的功能寫一次,然後將其放入一個模組中,就可以在不同的地方和項目中引用它。 封裝意味著這個庫可以在內部執行很多複雜的事情,但是只暴露出一小部分給外部使用。 你可以通過 import 來開始使用模組。 如果你曾經寫過 import SwiftUI 或者 import UIKit 那麼你已經使用過模組了。像 UIKit 和 SwiftUI 這樣的框架就是模組。 當你引入一個模組後,該模組聲明為 public 的部分在你的應用程式代碼內都是可見的。 模組之間可以相互引用,當這種情況發生時,你就自動擁有了對那些模組的訪問權限。 例如,SwiftUI 引入了 Foundation,所以你不需要寫 import SwiftUI import Foundation 你只需要第一行。 你的應用程式本身也是一個模組。 Swift 本身也是一個模組。你不需要手動 import Swift,因為它會自動為你處理。

Swift 變數

這篇教學文章是 Swift 系列的一部分。 變數可以讓我們將值指派給一個標籤,並使用 var 關鍵字來定義: var name = "Roger" var age = 8 一旦定義了一個變數,我們就可以修改它的值: age = 9 如果你不想變更變數的值,可以使用 let 關鍵字來定義常數: let name = "Roger" let age = 8 禁止修改常數的值。 當你定義一個變數並給它賦值時,Swift 會隱式地推斷它的類型。 8 是一個 Int 值。 "Roger" 是一個 String 值。 像 3.14 這樣的十進制數是一個 Double 值。 你也可以在初始化時指定類型: let age: Int = 8 但通常讓 Swift 推斷它的類型是常見的,特別是當你聲明一個沒有初始化值的變數時。 你可以聲明一個常數,然後在後面初始化它: let age: Int age = 8 一旦一個變數被定義,它就綁定到那個類型,除非你明確轉換它,否則不能將其他類型的值賦給它。 你不能這樣做: var age = 8 age = "nine" Int 和 String 只是 Swift 提供的兩種內置數據類型中的其中兩種。

swift-classes

#Swift 類別 本教程屬於 Swift 系列教程 類別與結構相似,但也有一些關鍵的差異。 使用以下語法定義類別: class Dog { } 在類別內部可以定義儲存屬性: class Dog { var age = 0 } 類別的定義定義了一個型別。要使用此型別創建新實例,可以使用以下語法: let roger = Dog() 一旦你有了實例,可以使用點語法來訪問其屬性: let roger = Dog() roger.age 相同的點語法用於更新屬性值: roger.age = 9 一個重要的區別是類別是引用型別,而結構(和列舉)是值型別。 這意味著將一個類別實例賦值給另一個變數不會複製該實例。兩個變數指向同一個實例: class Dog { var age = 0 } let roger = Dog() let syd = roger roger.age = 9 //syd.age == 9 這也意味著我們可以使用 let 定義對類別的引用,並且可以更改其屬性,如上面的示例所示。 我們可以創建類別的實例,稱為物件。 與結構一樣,類別可以具有屬性、方法等等。 與結構不同的是,我們 必須 定義一個初始化方法來在創建實例時初始化其值: class Dog { var age : Int init(age: Int) { self....

Swift: 如何使用SF Symbols

在設計 TabView 時,您可以為每個選項卡添加一個圖標,使用 “systemImage” 參數設置到 Label 的方式: TabView { Text("第一個") .tabItem { Label("第一個", systemImage: "tray") } } 在這個例子中,我們使用了 “tray” 這個圖標。 那麼如何找出您可以使用的其他圖標呢? Apple 為此創建了一個名為 SF Symbols 的應用程序。您可以從 https://developer.apple.com/design/downloads/SF-Symbols.dmg 下載它,然後安裝到您的 Mac 上。打開應用程序後,您可以瀏覽超過 1500 個符號並查看它們的名稱:

Swift:如何從數組中獲取隨機項目

本教程屬於 Swift 系列 假設您有一個 Swift 數組,像這樣: let items = [1, 2, 3] 且您想從中獲取一個隨機數字。 數組數據類型提供了 randomElement() 函數,該函數返回一個 Element? : let item = items.randomElement()

SwiftUI 表單

SwiftUI 提供了多個表單控制元件,我們可以用來從使用者那取得輸入。 想像一下你 iPhone 上的「設定」應用程式。 那個應用程式可以使用我們即將看到的內建表單控制元件來建構,例如: TextField Toggle Picker 等等 所有這些將會被包裝在一個 Form 視圖中: Form { // 放置表單控制元件 } 這告訴 SwiftUI 這是一個表單,在執行的特定平台上(iPhone、Mac、Watch),SwiftUI 會將內容以符合表單外觀的方式呈現。 這是 SwiftUI 的聲明式特性的一部分。我們將表單控制元件包裝在 Form 視圖中,告訴它這是一個表單,然後它為我們做出決策。 我們將會藉由介紹每個個別的表單控制元件來更多地了解表單。

SwiftUI 表單:DatePicker

在 SwiftUI 中,DatePicker 表單控制元件讓我們可以創建一個…日期選擇器。 它是如何運作的呢? 首先,我們創建一個 Date 型別的屬性: @State private var dateChosen = Date() 我們使用 @State 來讓我們能夠從 DatePicker 視圖中修改這個值。 然後,我們將這個屬性連接到 DatePicker 視圖: DatePicker(selection: $dateChosen, in: ...Date()) { Text("選擇日期和時間") } 它的外觀如下所示: 點擊不同的部分(日期或時間)將會顯示專用的選擇器界面元素: 以下是這個例子的完整程式碼: struct ContentView: View { @State private var dateChosen = Date() var body: some View { Form { DatePicker(selection: $dateChosen, in: ...Date()) { Text("選擇日期和時間") } } } } 你可以選擇只顯示日期的特定元素,使用 displayedComponents 屬性,例如只顯示日期: DatePicker(selection: $dateChosen, in: ...Date(), displayedComponents: .date) { Text("選擇日期和時間") } 或者只顯示時間:...