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` 關鍵字。

更新於:2023年2月28日

2000+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.