Swift 中的 init() 是什麼作用?


Swift 中的 init() 方法用於初始化類的物件。當使用類的建構函式建立物件時,它會被自動呼叫並建立物件的初始狀態。init() 方法可以被修改以提供自定義的初始化行為,例如為屬性設定預設值或執行其他設定任務。

該函式有時用於初始化具有某些值的物件,而不返回值。init() 方法是類的指定初始化器,應該用於建立該類的物件。

以下是一個簡單的 init() 示例 

在此示例中,您將建立一個具有某些屬性的類。為了為屬性提供預設值,您可以建立一個沒有引數的初始化器。

示例 

class Person {
    
   var firstName: String
   var lastName: String
   var age: Int
   init() {
      self.firstName = ""
      self.lastName = ""
      self.age = 0
   }
}

在此示例中,init() 方法用於將 firstName、lastName 和 age 屬性分別初始化為預設值空字串和 0。

您可以透過呼叫建構函式來建立類的物件 -

let person = Person()

init() 方法將被自動呼叫,並且 person 物件的屬性將使用預設值進行初始化。

這是另一個帶有引數的 init() 示例

在此示例中,您將建立一個具有某些屬性的類。為了為屬性提供初始值,您可以建立一個帶有引數的初始化器。

示例 

class Person {
    
   var firstName: String
   var lastName: String
   var age: Int
    
   init(firstName: String, lastName: String, age: Int) {
      self.firstName = firstName
      self.lastName = lastName
      self.age = age
   }
}

在此示例中,init() 方法接受三個引數:firstName、lastName 和 age。

您可以透過呼叫帶有引數的建構函式來建立類的物件

let person = Person(firstName: "Amit", lastName: "Sharma", age: 30)

init(firstName:lastName:age:) 方法將被自動呼叫,並且 person 物件的屬性將使用傳遞給建構函式的值進行初始化。

您還可以為 init() 方法的引數提供預設值

class Person {
    
   var firstName: String
   var lastName: String
   var age: Int
    
   init(firstName: String = "", lastName: String = "", age: Int = 0) {
      self.firstName = firstName
      self.lastName = lastName
      self.age = age
   }
}

在這種情況下,您可以透過呼叫建構函式而不帶任何引數來建立類的物件。屬性將使用預設值進行初始化。

let person = Person()

init() 方法將被自動呼叫,並且 person 物件的屬性將使用預設值進行初始化。

在使用 init() 方法時,我們需要記住一些事項 -

  • 當一個類有多個初始化器並且每個初始化器都有不同的引數時,這種情況稱為初始化器的“過載”。

  • 當便利初始化器呼叫另一個稱為“指定”初始化器的初始化器時,大多數初始化器工作都是由便利初始化器完成的。當類的底層實現相同,但有多種初始化方式時,我們使用便利初始化器。

示例

這是一個具有指定初始化器和便利初始化器的類的示例 -

class Person {
    
   var firstName: String
   var lastName: String
   var age: Int
    
   init(firstName: String, lastName: String, age: Int) {
      self.firstName = firstName
      self.lastName = lastName
      self.age = age
   }
    
   convenience init(firstName: String) {
      self.init(firstName: firstName, lastName: "", age: 0)
   }
}

在此示例中,init(firstName:lastName:age:) 方法是指定初始化器,init(firstName:) 是便利初始化器。

您可以透過呼叫指定初始化器來建立類的物件

let person = Person(firstName: "John", lastName: "Doe", age: 30)

您也可以透過呼叫便利初始化器來建立類的物件

let person = Person(firstName: "John")

在此示例中,便利初始化器呼叫指定初始化器並將 lastName 和 age 的預設值傳遞給它。

此外,自動初始化器繼承是 Swift 的一項功能。這意味著如果類沒有定義任何自己的唯一初始化器,它將自動繼承其超類的所有指定初始化器。

以下是使用 Swift 中的 init() 方法的一些優勢 -

  • 一致性 - 使用 init() 方法初始化物件可確保類的所有物件都具有一致的初始狀態。

  • 自定義 - 可以重寫 init() 方法以提供自定義的初始化行為。這允許您設定屬性的預設值,執行其他設定任務,甚至驗證輸入引數。

  • 多個初始化器 - 一個類可以有多個初始化器,每個初始化器都有不同的引數,這允許您提供不同的方式來建立類的物件。

  • 便利初始化器 - 一個類可以有便利初始化器,它們呼叫另一個初始化器來執行大部分初始化工作。

  • 自動初始化器繼承 - 自動初始化器繼承是 Swift 的一項功能,它允許類自動繼承其所有超類的指定初始化器,前提是它們沒有定義任何自定義初始化器。

  • 記憶體管理 - 使用 init() 方法初始化物件可確保物件在記憶體中得到正確分配和初始化。

  • 型別安全 - Swift 使用型別安全,init() 方法用於確保物件具有正確的型別。

  • 封裝 - 物件的實現細節可能包含在 init() 方法中,這使得其他程式碼更難以以不正確的方式構建物件。

  • 提高可讀性 - 透過使用 init() 方法,程式碼變得更易於閱讀和維護,因為它清楚地表明正在建立和初始化物件。

  • 必不可少 - init() 方法是類的指定初始化器,對於建立該類的物件是必需的。當使用類的建構函式建立物件時,它會被自動呼叫。

結論

Swift 中的類的物件可以使用 init() 方法進行初始化並設定其初始狀態。當透過執行類的函式建立物件時,它會被自動呼叫。它可以被自定義以提供獨特的初始化行為。

init() 函式在每個類中都是必不可少的,因為它允許開發人員確保類的所有物件都具有一致的初始狀態,提供多種建立物件的方式,封裝實現細節,並使程式碼更易於閱讀和維護。總的來說,init() 方法是一個強大的工具,可以幫助開發人員編寫結構良好、可靠且易於管理的 Swift 程式碼。

更新於: 2023年2月28日

492 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告