解釋Swift中函式和方法的區別


作為一名 iOS 開發者,理解 Swift 語言中函式和方法的區別至關重要。

你可能覺得函式和方法很難區分,甚至認為它們是一樣的。但事實並非如此,它們之間存在一些差異。讓我們在這篇文章中瞭解一下。

  • 在 Swift 語言中,方法用於類、結構體和列舉中,而函式則獨立定義。基本上,你可以在程式碼中的任何地方建立函式,而無需建立類或結構體。

  • 簡單來說,每個方法都是一個函式,但並非每個函式都是一個方法。

函式的作用是什麼?

基本上,函式用於執行特定操作,並透過其名稱呼叫。呼叫函式時,傳遞變數或常量作為引數非常簡單。此外,我們可以從函式返回任何型別的返回值。一個獨立於檔案的函式也可以在檔案外部定義。

語法

func functionName(parameters...) -> returnType {
   // write statements here to perform actions
}

示例

func performTaskAfter(_ seconds: Double, completionHandler: @escaping () -> ()?) {
   // perform an async action after given delay
   // .now() + seconds: adding given seconds in current time
   DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
      completionHandler?()
   }
}

解釋

在上面的示例中,我們定義了一個名為 performTaskAfter 的函式,用於在給定的秒數後執行任務。此函式可以在程式碼中的任何位置定義,並且可以從程式碼中的任何位置呼叫它。

方法的作用是什麼?

我們知道,每個方法都是一個函式,可以在類、結構體和列舉中定義。使用方法,我們可以根據需要執行某些操作。根據您的需求,您可以定義多個方法來執行不同的任務。

現在,您必須建立一個物件才能訪問類或結構體中定義的方法。使用該物件,您可以呼叫方法來執行任務。呼叫方法時可以傳遞引數。您應該注意,如果不建立該類或結構體的物件,則無法訪問其方法。

在 Swift 語言中,方法有兩種型別:

  • 例項方法 -顧名思義,這些是特定於例項的方法,可以透過例項呼叫。如果您嘗試在沒有該類或結構體的例項的情況下訪問方法,編譯器將報錯。此外,您不能從另一個類的例項呼叫一個類的(例如,類 Student)方法。

  • 型別方法 - 在 Swift 中,您可以使用 `static` 或 `class` 關鍵字字首定義型別方法。無需建立類或結構體的例項即可呼叫型別方法。可以直接從型別名稱呼叫它們。

示例

struct Student {
    
   let name: String
   let grade: Int
    
   // Instance method
   func displayInfo() {
      print("name: \(name)")
      print("grade: \(grade)")
   }
    
   // Type method
   static func dummyStudents() -> [Student] {
      return [Student(name: "Ray Sin", grade: 4),
         Student(name: "Cherry Blossom", grade: 2),
         Student(name: "Perry Scope", grade: 7)]
   }
}
let anne = Student(name: "Anne Teak", grade: 5)
// calling instance method from object anne
anne.displayInfo()

// calling type method
let students = Student.dummyStudents()
print("number of students: ", students.count)

輸出

name: Anne Teak
grade: 5
number of students:  3

解釋

在上面的示例中,我們建立了兩個不同的方法:`displayInfo()` 和 `dummyStudents()`。我們可以看到,第一個方法是例項方法,透過例項訪問,而第二個方法由類 Student 本身呼叫。

Swift中函式和方法的視覺化識別

Swift 語言顯示了函式和方法是如何表示的。很明顯,兩者都表示如下:

  • 函式的圖示像 ƒ

  • 方法的圖示是 M

總結Swift中函式和方法的區別
函式 方法
函式被定義為獨立的。因此,我們可以在類之外定義函式。 它們與類或結構體本身相關聯。在作用域之外,不能定義方法。
函式是 C/C++ 等結構化語言的獨立屬性。 方法在物件的範圍內工作,類似於 C#、Java、Swift 等面嚮物件語言。
函式不會捕獲任何引用變數或常量。 方法只能使用引用變數(或例項)呼叫。
函式不屬於類,它們單獨執行。 方法用於操作該類或結構體的特定例項。
無需建立物件即可呼叫它們。 需要一個物件才能訪問它們。
簡單來說,並非每個函式都是方法。 而每個方法都是一個函式。

結論

Swift 提供了用於不同目的的函式和方法。本文解釋了它們之間的區別,即使你可能認為它們是一樣的。

更新於:2022年12月21日

481 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告