類和結構體的儲存屬性必須在例項建立時,設定合適的初始值,可以提供預設值,也可以在構造器中提供初始值
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 上面結構體重使用了預設建構函式,結構體中按照從上到下的...