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