Swift 中的延遲儲存過程


在本教程中,您將學習有關延遲儲存過程的知識。什麼是 lazy 關鍵字以及如何在 Swift 中使用它?讓我們學習一下。

在 iOS 開發中,處理複雜物件非常常見。但是您需要在真正需要時才使用它們。

在 Swift 中,有一些宣告修飾符可以修改宣告的行為。lazy 修飾符就是一個例子,它用於修改類或結構體儲存變數的含義。

什麼是 Swift 的儲存屬性?

在 Swift 中,儲存屬性是包含類或結構體例項值的屬性。儲存屬性可以是變數或常量。您可以在定義時提供預設值。您也可以在初始化期間修改初始值。

延遲儲存屬性

lazy var 是一種屬性,其初始值在第一次呼叫之前不會計算。它也是屬性的一部分,在其中我們有其他屬性,如常量、計算屬性和可變屬性。

請記住,延遲屬性必須始終宣告為使用 var 關鍵字的變數,而不是常量。這是因為它的初始值可能在例項初始化完成後才被檢索。常量屬性必須在初始化完成之前始終具有值,因此不能宣告為延遲屬性。

什麼是 Swift 中的 lazy var?

用它的名稱來描述什麼是延遲變數會更準確。這意味著初始值在第一次被呼叫或使用之前不會被計算。

換句話說,延遲變數按需初始化。

確實,您只能在類或結構體中使用延遲變數。

讓我們透過一個例子來看一下:

示例

struct Student { var rollNumber: Int var name: String lazy var uniqueId: String = { "ID_\(name)_\(rollNumber)" }() } // Instance creation var amit = Student(rollNumber: 12009, name: "Amit") print(amit.uniqueId)

輸出

ID_Amit_12009

解釋

在上面的示例中,我們建立了一個名為 Student 的結構體,它具有一些儲存屬性和一個延遲屬性。我們定義了一個延遲變數來建立和獲取唯一的 ID。

當您建立此 Student 結構體的例項時,儲存屬性將使用它們的初始值進行初始化。但是,名為 uniqueId 的延遲屬性不會被初始化。所以現在問題是它什麼時候會被初始化?

當透過呼叫延遲屬性來讀取它時,它將被初始化並返回計算出的字串型別值。

延遲變數的結構

  • 延遲變數屬於類或結構體。延遲變數不能在程式碼中的任何地方宣告。

  • 在 var 之前使用 lazy 關鍵字修飾符來使變數變為延遲。

  • 延遲變數必須是計算出來的,而不是直接賦值。

    • 一段程式碼執行計算。

    • 使用花括號宣告程式碼塊。

    • 程式碼塊應該返回值。之後,它被賦給延遲變數。

    • 將程式碼塊分配給延遲變數。

  • 在花括號後新增括號 ()。

延遲 var 和計算屬性的區別

理解延遲儲存屬性和計算屬性之間的區別非常重要。對於初學者來說,有時很難區分它們。

  • 延遲變數是一種儲存屬性,其初始化被延遲。初始值僅計算一次。

  • 計算屬性是一個沒有儲存在任何地方的值。相反,它總是按需計算。

延遲變數的限制

在 Swift 中使用延遲變數時,存在一些限制。

  • 延遲變數的使用僅限於結構體和類。

  • 您不能宣告延遲常量 (lazy let),因為它的值不能更改。

  • 計算屬性不能是延遲變數。這是因為計算屬性在每次被呼叫時都會重新計算。

  • 延遲變數的初始化不是原子操作。因此,延遲變數不是執行緒安全的。

結論

您學習了儲存屬性和延遲儲存屬性。這些在您的程式碼庫中非常有用且重要。深入學習並更多地練習延遲儲存屬性。

更新於: 2022年11月22日

4K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.