Swift 字典

本教程屬於 Swift 系列 我們使用字典來創建一組鍵值對。 以下是如何創建一個具有1個鍵值對的字典,其中鍵是一個字符串,值是一個整數: var dict = ["Roger": 8, "Syd": 7] 在這種情況下,類型是推斷出來的。您也可以在聲明時明確設置類型: var dict: [String: Int] = ["Roger": 8, "Syd": 7] 在此示例中,我們創建了一個空的整數鍵和字符串值的字典: var dict = [String: Int]() //或者 var dict: [String: Int] = [:] 您可以使用以下語法訪問分配給某個鍵的值: var dict = ["Roger": 8, "Syd": 7] dict["Roger"] //8 dict["Syd"] //7 您可以通過以下方式更改分配給某個鍵的值: dict["Roger"] = 9 字典必須聲明為“var”才能修改。如果使用“let”聲明,則無法通過添加或刪除元素來修改它。 使用相同的語法添加一個新的鍵/值對: dict["Tina"] = 4 要刪除一個鍵/值對,將值分配為nil: dict["Tina"] = nil 或者調用removeValue(forKey:)方法: dict.removeValue(forKey: "Tina") 要獲取字典中的項目數量,使用count屬性: var dict = ["Roger": 8, "Syd": 7] dict....

Swift 函數

本教程屬於 Swift 系列的一部分 你的程式碼通常是有組織地以函數的方式進行組織的。 使用 func 關鍵字聲明一個函數: func bark() { print("woof!") } 函數可以分配給結構、類和列舉,這種情況下我們稱之為方法。 使用函數名稱來呼叫函數: bark() 函數可以返回一個值: func bark() -> String { print("woof!") return "barked successfully" } 你可以將其賦值給一個變數: let result = bark() 函數可以接受參數。每個參數都有一個名稱和一個類型: func bark(times: Int) { for index in 0..<times { print("woof!") } } 參數的名稱對於函數內部而言是內部名。 在調用函數時,我們使用參數名稱來傳遞其值: bark(times: 3) 當說起這個函數時,我們不稱其為 bark(),而稱之為 bark(times:repeat:)。 這是因為我們可以有多個具有相同名稱但不同參數集的函數。 您可以通過使用 _ 關鍵字來避免使用標籤: func bark(_ times: Int, repeatBark: Bool) { //...函數體 } 這樣您就可以以以下方式調用它: bark(3, repeatBark: true) 在 Swift 和 iOS API 中,通常第一個參數沒有標籤,而其他參數則被標記。...

Swift 物件

本教程屬於 Swift 系列 在 Swift 中,一切皆為物件。即使我們將數值 8 賦予變數 age,這個 8 也是一個物件。 在某些語言中,物件是一種特殊型別。但在 Swift 中,一切皆為物件,這導致了 Swift 的一個特點:每個值都可以「接收訊息」。 每種型別可以有多個與之相關的函式,我們稱之為方法。 舉例來說,對於數值 8,我們可以呼叫其 isMultiple 方法,以檢查該數字是否為另一數字的倍數: 字串值有另外一組方法。 一個型別也可以有實例變數。例如,字串型別有一個名為 count 的實例變數,可用於獲取字串中的字符數量: Swift 有三種不同的物件型別,我們稍後會詳細介紹:類別(classes)、結構體(structs)和列舉型別(enums)。 它們之間非常不同,但有一個共同點:對於物件型別,我們可以新增方法,並且對於任何型別的任何值,我們都可以發送訊息。

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 條件語句: `if`

本教程屬於 Swift 系列教程 if 語句是執行條件檢查的最常用方式。我們使用 if 關鍵字,後面跟著一個布爾表達式,再後面是一個包含在條件為真時執行的代碼塊: let condition = true if condition == true { // 條件為真時執行的代碼 } 如果條件為假,則執行 else 塊: let condition = true if condition == true { // 條件為真時執行的代碼 } else { // 條件為假時執行的代碼 } 你可以選擇使用括號將條件表達式括起來,如果你喜歡的話: if (condition == true) { // ... } 同樣地,你也可以直接寫: if condition { // 條件為真時執行 } 或者 if !condition { // 條件為假時執行 } Swift 與許多其他語言的一個區別是它防止由於錯誤地進行賦值而不是比較而引起的錯誤。這意味著你不能這樣做: if condition = true { // 程序無法編譯 } 原因是賦值運算符不返回任何值,但 if 條件必須是一個布爾表達式。

Swift 通訊協定

本教程屬於 Swift 系列 通訊協定是一種讓不同類型的對象具有共同功能的方法。 通訊協定的定義如下: protocol Mammal { } 結構體和類別可以採用通訊協定: struct Dog: Mammal { } class Cat: Mammal { } 通訊協定可以定義屬性和方法,但不提供值和實現,結構體/類別必須實現它們: protocol Mammal { var age: Int { get set } func walk() } 屬性可以定義為 get 或 get set。如果是 get,則屬性必須實現為只讀,并帶有一個 getter。 任何採用該通訊協定的類型必須遵從該協定,即實現這些方法或提供這些屬性: struct Dog: Mammal { var age: Int = 0 func walk() { print("The dog is walking") } } class Cat: Mammal { var age: Int = 0 func walk() { print("The cat is walking") } } 結構體和類別可以採用多個通訊協定:...

Swift 程式語言介紹

本文是關於 Swift 的新系列文章的開始 Swift 程式語言是由蘋果於 2014 年推出的,並且是與所有蘋果操作系統系列一起使用的官方語言: iOS、iPadOS、watchOS、macOS、tvOS。 Swift 是一個開放源碼、通用、編譯的程式語言。 它是一個靜態類型的程式語言。 每個值都有一個分配的類型。在編譯時使用該值作為參數或返回時,將始終檢查其類型。如果不匹配,則程式將無法編譯。 Swift 的編譯器是 LLVM,並且它包含在用於蘋果軟體開發的標準 IDE - Xcode 中。 Swift 是一種現代化的程式語言,旨在“適應”先前設計了一種名為 Objective-C 的不同程式語言的生態系統。 即使對於官方的蘋果應用程式,iPhone 和 Mac 上運行的大多數軟體都是基於 Objective-C 代碼開發的,但 Swift 的使用量逐年增加,而且在未來的新應用程式中可能會使用 Swift。 在蘋果引入 Swift 之前,Objective-C 受到大量的發展,以引入新的功能和特性,但近年來這一努力已大幅減少,為了 Swift 的開發。 這並不意味著 Objective-C 已經死亡或不值得學習:Objective-C 對於任何蘋果開發者來說仍然是一個重要的工具。 也就是說,我不打算在這裡涵蓋 Objective-C,因為我們專注於 Swift。 這是蘋果平台的現在和未來。 在短短的 6 年內,Swift 已經經歷了 5 個主要版本,而我們現在(在撰寫本文的時候)是在版本 5.3。 Swift 被聞名為 Apple 的產品語言,但它並不僅僅是一個 Apple 的語言。我們可以在其他幾個平臺上使用它。它是開源的,因此將語言移植到其他平臺不需要任何許可或授權,並且您可以找到 Swift 專案來創建 Web 伺服器和 API(https://github.com/vapor/vapor),以及與微控制器交互的專案。 它是一門通用的程式語言,建立在現代概念之上,有著光明的前景。 Swift 擁有一些我所看過的程式語言中最好的文件。然而,我想在這裡寫一些關於它的內容,因為我認為有時文件對於初學者來說可能有些複雜。 此外,我通過寫作來學習,並決定重新學習 Swift,在我最後一次接觸 Swift 五年後。自那時以來,語言和 iOS 生態系統已經有了很大的變化,我覺得重新從頭學習它。...

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!...