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 從上面的示例來看,會發現 ...