Swift 中的 'open' 關鍵字是什麼?
在 Swift 中,我們有三個關鍵字——`open`、`public` 和 `final`。這三個詞具有不同的屬性,有助於我們理解程式碼是否可以擴充套件到另一個模組,從而使程式碼易於重用。本文將學習這些關鍵字的屬性。
示例
這是一個在類定義中使用 `open` 關鍵字的示例
import Foundation
open class Person {
var firstName: String?
var lastName: String?
var age: Int?
var address: String?
}
class Student: Person {
var school: String?
var grade: Int?
var score: Double?
}
在這個例子中,`Person` 被定義為 `open`,這意味著它可以被子類化。`Student` 是 `Person` 類的子類,能夠繼承其屬性和方法。
如果我們將 `open` 關鍵字改為 `final`
import Foundation
final class Person {
var firstName: String?
var lastName: String?
var age: Int?
var address: String?
}
class Student: Person {
var school: String?
var grade: Int?
var score: Double?
}
`Person` 現在被定義為 `final`,這意味著它不能被子類化。這將在 `Student` 中導致編譯時錯誤。
值得注意的是,Swift 中類的預設行為是 `final`,因此如果您希望一個類能夠被子類化,則必須顯式使用 `open` 關鍵字。
您也可以將 `open` 關鍵字與結構體和協議一起使用,並且會得到與類相同的行為。
瞭解 `open` 和 `final` 之間的區別以及 `open` 和 `public` 之間的區別非常重要。
`open` 和 `final` 之間的區別是什麼?
`open` 訪問許可權可用於類、結構體或協議。當您使用 `open` 時,它表示您可以透過同一模組中的其他類、結構體或協議,或其他模組來建立子類或擴充套件。它有助於使您的程式碼更靈活和可重用。此概念有助於實現面向物件程式設計的概念。
另一方面,`final` 關鍵字表示類、結構體或協議不能被擴充套件或子類化。當您想要保護您的程式碼並且不想提供程式碼重用的靈活性時,`final` 關鍵字是一個不錯的選擇。這意味著如果一個類是 `final` 的,則您不能建立它的子類。
以下是這兩個關鍵字差異的總結:
Swift 中的 `open` 與 `final`
| 關鍵字 | 訪問許可權 | 可重寫性 |
|---|---|---|
| open | 可訪問的 | 可重寫的 |
| final | 可訪問的 | 不可重寫的 |
`final` 關鍵字確保類、結構體或協議不會被子類或擴充套件更改。基本上,這有助於改進程式碼最佳化。此外,編譯器不需要處理類、結構體或協議的可擴充套件性,因為它們是最終的。最後,它提高了應用程式的整體效能。
簡而言之,`open` 允許擴充套件和子類化,而 `final` 則阻止它。
`open` 和 `public` 之間的區別是什麼?
`open` 訪問許可權可用於類、結構體或協議。當您使用 `open` 時,它表示您可以透過同一模組中的其他類、結構體或協議,或其他模組來建立子類或擴充套件。您的程式碼變得更靈活,可以重用。
`public` 關鍵字的屬性是指示同一模組或其他模組(匯入同一模組)中的其他程式碼可以訪問或使用類、結構體甚至協議。
以下是這兩個關鍵字差異的總結:
Swift 中的 `open` 與 `public`
| 關鍵字 | 訪問許可權 | 可重寫性 | 子類化 |
|---|---|---|---|
| open | 可在任何模組中訪問 | 可重寫的 | 允許 |
| public | 可在任何模組中訪問 | 不可重寫的 | 不允許 |
結論
在本文中,我們發現我們可以將所有三個訪問許可權用於不同的目的,如下所示:
`open` 關鍵字 - 它可以被任何模組訪問,它是可重寫的,並且允許子類化。
`public` 關鍵字 - 任何模組都可以訪問它,但它不可重寫,並且根本不允許子類化。
`final` 關鍵字 - 它不能被擴充套件甚至子類化。
如果您想完全保護您的程式碼,則應選擇 `final` 關鍵字。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP