Swift學習之構造過程

2021-07-09 12:55:30 字數 1956 閱讀 7603

類和結構體的儲存屬性必須在例項建立時,設定合適的初始值,可以提供預設值,也可以在構造器中提供初始值

1.構造引數

如果構造器的引數使用了外部引數名,必須使用,也可以用 _ 代替,不適用外部引數名

struct celsius 

init (twotemperature two :double)

}let onecelsius = celsius(onetemperature: 0)

let twocelsius = celsius(twotemperature: 20)

print("onecelsius is :\(onecelsius.temperatureincelsius),towcelsius is \(twocelsius.temperatureincelsius)") //onecelsius is :10.0,towcelsius is 10.0

class question

func ask()

}var question = question(text: "can i ask a question")

question.ask() //can i ask a question

print(question.response) //nil,因為是可選的,如果不提供預設值,會自動的賦值為nil

print(question.id) // can i ask a question001

2.預設構造器

類和結構體如果都沒用提供構造器,則類預設的提供乙個init(){}構造器,結構體提供乙個逐一成員構造器

3.值型別的構造器**

struct point 

struct size

struct rect

init(origin:point,size:size)

init(center:point,size:size)

}

4.類的繼承和構造過程
指定構造器:跟簡單的構造器一樣 init(parameters){} 總是向上**

便利構造器:convince init(parameters){} 總是橫向**

二個階段

(1)例項沒有建立成功,記憶體還沒有初始化完,會沿著構造器鏈往上執行,直到所有的屬性給初始化完畢,例項建立成功,記憶體初始化完

(2)向下執行額外的屬性賦值等操作

三條原則

(1)指定構造器必須繼承父類的指定構造器

(2)便利構造器必須呼叫同一類的其他構造器

(3)便利構造器必須最終導致乙個指定構造器被呼叫

四個檢查

(1)指定構造必須先將引入的屬性給初始化完畢才能將構造任務向上**給父類的指定構造器

(2)指定構造器必須先向上**給父類的指定構造器之後才能修改繼承過來的屬性

(3)便利構造器必須先橫向**給同一類中得指定構造器,才能任意的給屬性賦值

(4)在第一階段完成之前,不能呼叫任何例項方法,不能讀取任何例項的屬性,也不能引用self作為例項

5.可失敗構造器
struct animal 

self.species = species

}}class product 所有的儲存屬性必須在return之前

self.name = name

if name.isempty

}}class caritem: product () //可以通過閉包給屬性賦值,但是在閉包最後必須加()代表立即執行

init?(name: string,quantity:int) 所有的儲存屬性必須在return之前

self.quantity = quantity

//if quantity < 1 super.init must be called before returning nil

super.init(name: name)

}}

swift學習筆記 五 構造過程

構造過程是為了使用某個類 結構體或列舉型別的例項而進行的準備過程。在構造過程中,對每乙個屬性進行了初始值預設和其它必要的準備和初始化工作。與oc相比,swift的建構函式。不須要返回值。同一時候,在類和結構體的構造過程中,必須對全部的儲存型別屬性,包括繼承自父類的屬性。賦予合適的初始值。儲存型別值不...

swift 學習 15 構造過程 01

構造過程 是使用類,結構體 或 列舉型別的例項之前的準備過程,在新例項可用前必須執行這個過程,具體操作包括 設定例項中每個儲存型屬性的初始值 和 執行其他必須的設定 或 初始化工作 通過定義 構造器 來實現構造過程,這些構造器可以看做是用來建立特定型別新例項的 特殊方法,與 oc 中的構造器不同,s...

Swift學習之構造與析構

swift限制類的建構函式之間 呼叫的規則 構造過程安全檢查 建構函式繼承 析構函式簡介 建構函式 init 示例 class employee struct rectangle rectangle width 10.0,height 10.0 上面結構體重使用了預設建構函式,結構體中按照從上到下的...