Swift 中為什麼需要 convenience 關鍵字?


在 Swift 中,您可以建立額外的初始化器來為屬性提供預設值。您可以使用 convenience 關鍵字來新增此功能。讓我們來看一些在 Swift 語言中如何使用 convenience 初始化器的示例。

Swift 中的 convenience 初始化器是什麼?

在 Swift 中,用 convenience 關鍵字標記的類中的次要初始化器,提供建立該類例項的額外或替代方法。它簡化並簡化了初始化過程,使開發人員更容易處理該類。次要初始化器可以呼叫同一類的指定初始化器,從而減少程式碼重複並提高可維護性。

以下是如何在 Swift 中使用 convenience 初始化器的示例

步驟 1 − 在此示例中,我們有一個名為 Person 的類,它有一個指定初始化器,該初始化器同時接收名稱和年齡引數。我們還有一個 convenience 初始化器,它只接收名稱引數並將年齡設定為預設值 0。

步驟 2 − convenience 初始化器用 convenience 關鍵字標記。它使用 self.init 呼叫指定初始化器,並傳入名稱引數和年齡的預設值。

步驟 3 − 透過此設定,我們可以使用 convenience 初始化器僅使用名稱建立 Student 例項,就像我們對 juile 所做的那樣。年齡會自動設定為預設值 0。我們還可以使用指定初始化器建立同時具有名稱和年齡的 Student 例項,就像我們對 alex 所做的那樣。

示例

import Foundation
class Student {
    
   let name: String
   let age: Int
    
   init(name: String, age: Int) {
      self.name = name
      self.age = age
   }
    
   convenience init(name: String) {
      self.init(name: name, age: 0)
   }
}
let alex = Student(name: "Alex Murphy", age: 30)
let julie = Student(name: "Julie Martin")
print("Alex age: \(alex.age)")
print("Julie age: \(julie.age)")

輸出

Alex age: 30
Julie age: 0

以下是另一個在 Swift 中使用 convenience 初始化器的示例

步驟 1 − 在此示例中,我們有一個名為 Shape 的類,它有一個指定初始化器,該初始化器接收一個名稱引數。我們還有一個 convenience 初始化器,它將名稱設定為預設值“Unknown Shape”。

步驟 2 − 我們還有一個 Shape 的子類 Circle,它有一個指定初始化器,該初始化器接收一個名稱和一個半徑引數。我們還有一個 convenience 初始化器,它只接收一個半徑引數並將名稱設定為預設值“Circle”。

步驟 3 − Circle 類中的 convenience 初始化器用 convenience 關鍵字標記。它使用 self.init 呼叫同一類的指定初始化器,並傳入名稱的預設值以及半徑引數。

步驟 4 − 透過此設定,我們可以使用 convenience 初始化器僅使用預設名稱建立一個 Shape 例項,就像我們對 unknownShape 所做的那樣。我們還可以使用 convenience 初始化器僅使用半徑建立一個 Circle 例項,就像我們對 circle 所做的那樣。

步驟 5 − 名稱會自動設定為預設值“Circle”。我們還可以使用指定初始化器建立同時具有名稱和半徑的 Circle 例項。

示例

import Foundation
class Shape {
    
   let name: String
    
   init(name: String) {
      self.name = name
   }
    
   convenience init() {
      self.init(name: "Unknown Shape")
   }
}
class Circle: Shape {
    
   let radius: Double
    
   init(name: String, radius: Double) {
      self.radius = radius
      super.init(name: name)
   }
    
   convenience init(radius: Double) {
      self.init(name: "Circle", radius: radius)
   }
}
let unknownShape = Shape()
let circle = Circle(radius: 5.0)
print("Shape 1: \(unknownShape.name)")
print("Shape 2: \(circle.name)")

輸出

Shape 1: Unknown Shape
Shape 2: Circle

Swift 中的 convenience 初始化器具有許多優點

  • 簡化初始化 − convenience 初始化器提供了一種建立類例項的附加或替代方法,增強了開發人員在使用該類時的便捷性和靈活性。透過為某些引數提供預設值或允許完全刪除某些引數,它簡化了初始化過程。

  • 減少程式碼重複 − convenience 關鍵字允許次要初始化器呼叫同一類的指定初始化器,從而減少程式碼重複並提高可維護性。這確保了對 convenience 初始化器所做的任何修改都會自動反映在指定初始化器中。

  • 提供更好的可讀性 − convenience 初始化器透過建立不同的初始化器來簡化程式碼庫,從而提高程式碼的可讀性。它有助於開發人員理解初始化器的用途。

  • 提供更大的靈活性 − 您可以根據需要建立多個 convenience 初始化器。它有助於使類更靈活,更容易編寫測試用例。

結論

Swift 使用 convenience 關鍵字宣告類的 convenience 初始化器,它提供了一種初始化例項的替代方法。convenience 初始化器可以減少程式碼重複,提高可讀性,並提供更大的靈活性,同時有助於簡化和加快初始化過程。convenience 初始化器透過為某些引數提供預設值或允許完全刪除某些引數,使開發人員更容易、更靈活地使用該類。

更新於:2023年4月11日

567 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

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