Class
物件的初始化 Initialization
我們想要有一個 Car Class,其用意是做一輛車 , 內容有 顏色、品牌和幾個門,程式示意如下:
class Car {
var color: Color
var brand: String
var doors: Int
}
這裡其實會出錯,原因在於,當我們想要創建一個車的時候,color,brand,doors 因為沒有給初始值, 所以程式不給過。有幾種不同的寫法,可以解初始值的問題
先給一個預設值,後面再來改
class Car {
var color: Color = .black
var brand: String = "Volvo"
var doors: Int = 4
}
Optional Type
class Car {
var color: Color?
var brand: String?
var doors: Int?
}
Init Function
class Car {
var color: Color
var brand: String
var doors: Int
init() {
color = .blue
brand = "BMW"
doors = 2
}
}
Init Function With Paramter
class Car {
var color: Color
var brand: String
var doors: Int
init(color:Color, brand:String,doors:Int) {
this.color = color
this.brand = brand
this.doors = doors
}
}
提示: 一旦使用參數做初始化的話 預設的init(){} 就會失效,想要的話 就要手動補回去
class Car {
var color: Color
var brand: String
var doors: Int
init(color:Color, brand:String,doors:Int) {
this.color = color
this.brand = brand
this.doors = doors
}
init() {
color = .yellow
brand = "BENZ"
doors = 5
}
}
物件初始化若有可能失敗,那我們要利用 init? 回傳nil
class Car {
var color: Color
var brand: String
var doors: Int
init?(color:Color, brand:String,doors:Int) {
if(doors>10){ //10門的車應該就做不出來了吧?
return nul
}
this.color = color
this.brand = brand
this.doors = doors
}
}
物件的類別 Property
class Car {
var color: Color?
var brand: String?
var doors: Int?
}
color,brand,doors 是這輛車的屬性,(一般稱之為 stored property), 當我們創建了一輛車,就可以賦予屬性的值,以及取用屬性的值。
var car1 = Car()
print(car1.color) //nil
car1.color = .purple
print(car1.color) //.purple
屬性也可以經由計算的結果來取得和設定 (computed property)
class Car {
var color: Color?
var brand: String?
var doors: Int?
var persons : Int {
get {
if(brand=="BMW"){
return 2
}else{
return 4
}
}
set {
if(newValue==2){
brand = "BMW"
}
}
}
}
另外,也可以觀察屬性的變化(property observer),預先給好取值與賦值的規則
class Car {
var color: Color?
var brand: String?
var doors: Int?
var persons : Int = 4
{
willSet {
if persons <= 0 {
println("人數小於等於0的車是不存在的")
}
}
didSet {
if persons <= 0 {
persons = oldValue
}
}
}
}
lazyload
未完待續
轉載請註明來源,歡迎對文章中的引用來源進行考證,歡迎指出任何有錯誤或不夠清晰的表達。可以郵件至 [email protected]