Swift 結構體

本教程屬於 Swift 系列。 結構體是 Swift 中一個重要的概念。 Swift 到處都有結構體,甚至內建的類型也是結構體。 我們可以創建結構體的實例,我們稱之為 對象(objects)。 在大多數語言中,對象只能由類創建。Swift 也有類,但是你也可以從結構體中創建對象,官方文件還建議我們更傾向使用結構體,因為它們使用起來更加簡單。 它們是類的輕量版。 一個結構體可以有屬性。 一個結構體可以有方法(函數)。 一個結構體可以定義下標。 一個結構體可以定義初始化器。 一個結構體可以遵從協議。 一個結構體可以被擴展。 類允許的一個重要特性是繼承,所以如果你需要繼承,你需要使用類。 結構體的定義使用如下語法: struct Dog { } 結構體內部你可以定義存儲屬性: struct Dog { var age = 8 var name = "Roger" } 這個結構體定義定義了一個類型。要創建一個具有此類型的新實例,使用以下語法: let roger = Dog() 一旦你有了一個實例,你可以使用點語法來訪問其屬性: let roger = Dog() roger.age roger.name 相同的點語法也用於更新屬性值: roger.age = 9 你也可以通過傳遞屬性的值創建結構體實例: let syd = Dog(age: 7, name: "Syd") syd.age syd.name 要這樣做,屬性必須被定義為變量,使用 var,而不是常量(使用 let)。同時,重要的是要尊重那些屬性定義的順序。 結構體可以有實例方法:屬於結構體實例的函數。 struct Dog { var age = 8 var name = "Roger" func bark() { print("\(name): wof!...

Swift 註解

本教程屬於Swift系列教程。 在 Swift 中,註解可以有兩種形式:單行註解和多行註解。 單行註解的語法如下: //這是一個註解 它可以放在程式碼的行尾: let a = 1 //這是一個註解 多行註解使用以下語法: /* 這是一個多行註解 */ 在 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 迴圈: `while`

本教程屬於 Swift 系列 while 迴圈可以用於迭代任何內容,並且只要條件是 true 就會持續執行: while [條件] { //陳述... } 在迴圈區塊執行之前,會先檢查條件是否為真。 範例: var item = 0 while item <= 3 { //重複執行 3 次 print(item) item += 1 }

Swift 迴圈:`repeat-while`

本教程屬於 Swift 系列文檔 在 Swift 中,repeat-while 迴圈類似於 while 迴圈,但唯一不同的是條件在迴圈塊之後檢查,因此迴圈塊至少會執行一次。然後,條件將被檢查,如果評估結果為 true,則迴圈塊將被重複執行: repeat { // 陳述... } while [條件] 範例: var item = 0 repeat { // 重複 3 次 print(item) item += 1 } while item < 3

Swift 迴圈控制轉移陳述

本教程屬於 Swift 系列教程 Swift 提供了兩個陳述語句,您可以使用它們來控制迴圈內的流程:continue 和 break continue 用於停止當前的迴圈迭代,並運行下一個迭代。 break 結束迴圈,不執行任何其他迭代。 示例: let list = ["a", "b", "c"] for item in list { if (item == "b") { break } //做一些事情 }

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: 如何使用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()

Swift可選型别和`nil`

本教程屬於Swift系列 可選型别是Swift的一個重要特性。 當你不確定一個值是否存在,你可以將其聲明為可選型别。 可選型别將另一個值包裹在內,具有自己的型别。或者也可能不包裹值。 我們可以在型别後面加上一個問號來聲明一個可選型别,像這樣: var value: Int? = 10 現在value不是一個Int值,而是一個包裹了Int值的可選型别。 要查找可選型别是否包裹了值,你必須進行解包。 可以使用一個感嘆號來進行解包,像這樣: var value: Int? = 10 print(value!) //10 Swift方法常常返回可選型别。例如,Int型别的初始化器接受一個字符串,並返回一個Int可選型别: 這是因為它不知道這個字符串能否轉換為一個數字。 如果可選型别不包含值,則評估為nil,並且無法進行解包: nil是一個特殊的值,不能賦值給一個變數,只能賦值給可選型别: 通常在代碼中使用if語句來解包值,像這樣: var value: Int? = 2 if let age = value { print(age) }