Swift學習筆記 初始化

2021-08-29 23:51:17 字數 2211 閱讀 6804

swift為結構體提供了預設初始化方法,當結構體所有屬性都有預設值時,可以使用空白初始化方法

struct

person

var person=

person

()

成員初始化方法是預設初始化方法的另外一種形式,注意常量屬性如果有預設值則不能使用初始化方法,因為常量只能初始化一次

struct

person

var person=

person

(height:

180)

一旦有了自定義初始化方法,預設初始化方法就不再提供了,自定義初始化方法名為init且沒有返回值。初始化方法的形參名如果和屬性名相同,則需要使用self訪問屬性,不然編譯器無法區分屬性和引數

struct

person

}var person=

person

(height:

180,thecolor:

"red"

,tag:

1)

自定義初始化方法可以有多個,使用self.init呼叫其他自定義初始化方法

struct

person

init

(height:

int)

}

和結構體不同,類沒有預設的成員初始化方法,當類的所有屬性都有預設值且沒有自定義初始化方法時,類會得到乙個預設的空初始化方法

class

person

var person=

person

()

類的指定初始化時確保屬性在初始化完成前都有值,如果類有父類,那麼子類的指定初始化方法必須呼叫父類的指定初始化方法

class

person

}class

worker

:person

}var worker=

worker

(years:

10, job:

"coder"

, height:

175, color:

"red"

)

不同於指定初始化,便捷初始化不需要確保所有屬性有值,而是做完自己的事情後呼叫其他便捷初始化或者指定初始化,總之最後要呼叫所在類的指定初始化方法,便捷初始化需要在init前面加上convenience

class

worker

:person

convenience

init

(job:

string)}

var worker=

worker

(job:

"coder"

)

如果子類為所有新增屬性提供了預設值,那麼下面兩種情況下會繼承父類的初始化方法

乙個類可以要求子類提供特定的初始化方法,關鍵字為required,子類實現該方法的時候也需要加上這個關鍵字

class

person

}class

worker

:person

}var worker=

worker

(height:

170, color:

"red"

)

反初始化方法只有引用型別才有,在例項被銷毀前呼叫,乙個類只能有乙個反初始化方法,反初始化方法用deinit表示,沒有引數

class

worker

:person

deinit

}var worker:

worker?=

worker

(height:

170, color:

"red"

)worker=

nil

有時候初始化方法需要返回失敗,這個時候需要返回nil,就可以利用前面學到的可空型別來實現了,在init後面新增問號表示這個初始化方法可能會失敗

class

person

self

.height=height

self

.color=color

}}

Swift學習筆記系列 (13)初始化

tags swift 學習筆記 目標 類 結構體和列舉 目的 例項使用前的準備,儲存屬性賦值以及其他必要操作 類和結構體的儲存屬性在使用前必須要有初始值,提供初始值可以通過定義時指定,也可以通過構造方法賦值。初始化過程中給儲存屬性賦值,不會觸發觀察者行為。通過構造方法的引數給必須要有值的儲存屬性賦值...

Swift初始化方法

swift中有兩類初始化方法 designated 指定 和convenience 便利 初始化方法。convenience初始化方法必須呼叫同乙個類 self 中的designated初始化。init parameters convenience init parameters 特別要注意構造器的...

Swift 初始化順序

之前寫初始化類,一直也沒注意有啥講究,今天看到了 王巍 先生的書才發現有點說法 就記一下 1.swift 寫初始化方法,必須保證宣告的所有屬性都被初始化,也因此初始化的呼叫順序就有點說法了 2.示例 class people class temppeople people 從上面的示例來看,會發現 ...