要定義乙個類,只要在 class 後面加上類名即可。在類中定義屬性的寫法與定義常量和變數一樣,只不過它是在類的範圍裡。同樣,方法的定義和函式定義是一樣的寫法。
class
shape
}
試一試要建立類的例項,只需在類名後加上括號就可以了。用句點來訪問類例項的屬性和方法。用 let 增加乙個常量屬性,再加乙個有乙個引數的方法。
var shape = shape()
shape.numberofsides = 7
var shapedescription = shape.******description()
這個版本的shape類還差了點重要的東西:初始化器(博主注:其實就是建構函式),用來在類例項建立時構建該類。用 init 來表示。
class
namedshape
func ******description() -> string
}
注意 self 是怎麼用來把name引數傳給name屬性的。建立類例項時,引數就像呼叫函式時傳引數那樣傳給初始化器。每個屬性都需要指定乙個值——不管是在定義時(就像numberofsides)還是在初始化器裡(就像name)。
如果要在物件被釋放之前做一些清理工作,可以用 deinit 來建立乙個析構函式。
要定義子類只需在類名後加分號,再寫上父類的類名即可。swift裡並不要求類必須繼承任何標準的父類,所以如果需要的話可以省略掉父類。
子類要重寫父類的方法需要用 override 進行標記——如果沒加override就重寫了父類的方法是會被編譯器報錯的。編譯器還會檢測加了override的方法是不是真的是重寫父類的方法。
class square: namedshape
func area() -> double
override func ******description() ->
string
}let test = square(sidelength: 5.2, name: "my test square")
test.area()
test.******description()
試一試除了簡單儲存值外,屬性還可以加getter和setter。加乙個namedshape的子類circle,有radius屬性,並且在初始化器中接收該引數。在circle類裡實現乙個area() 和 ******description() 方法。
class
equilateral********: namedshape
var perimeter: double
set
}override func ******description() -> string
}var ******** = equilateral********(sidelength: 3.1, name: "a ********")
println(********.perimeter)
********.perimeter = 9.9
println(********.sidelength)
在周長的setter裡,新的值有個被隱式的稱為newvalue的名字。你可以在set後面加個括號,顯式地定義乙個名字。
注意 equilateral******** 類的初始化器有三步不同:
設定子類定義的屬性值。
呼叫父類的初始化器。
更改父類定義的屬性值。
其餘要用到方法、getter或者setter的初始化工作也可以在這個時候進行。
如果不需要計算屬性值但任然要在設定了新值之前或之後執行一段**的話,就要用到 willset 和 didset。例如,下面的類確保了三角形的邊長與正方形邊長是一致的。
class ********andsquare
}var square: square
}init(size: double, name: string)
}var ********andsquare = ********andsquare(size: 10, name: "another test shape")
println(********andsquare.square
.sidelength)
println(********andsquare.********
.sidelength)
********andsquare.square = square(sidelength: 50, name: "larger square")
println(********andsquare.********
.sidelength)
類裡的方法與函式有乙個很重要的不同。函式裡的引數名只能用於函式內,但方法裡的引數名還可以用在你呼叫該方法的時候(除了第乙個引數)。預設情況下,方法呼叫時與方法自己內部,引數名是一樣的。你可以再指定另乙個名字,用於方法內。
class
counter
}var counter = counter
()counter.incrementby(2, numberoftimes: 7)
遇到可選值的時候,你可以在方法、屬性和下標等操作前寫個 ?。如果 ?前的值是 nil ,那麼 ? 後的所有東西都會被忽略,而且整個表示式的值是nil。否則,可選值被開啟,?後的所有東西按照開啟值來繼續。不管哪種情況,整個表示式的值都是可選值。
let optionalsquare: square? = square(sidelength: 2.5, name: "optional square")
let sidelength = optionalsquare?.sidelength
Swift2學習 Swift概覽4 物件和類
物件和類 使用class並在其後面跟著類名來建立乙個類。類中常量或者變數已同樣的方法宣告,除非他是類的上下文 類之外 同樣的,方法和類以同樣的方式宣告。class shape 練習 通過let新增乙個常量屬性,並新增另外乙個方法來使用這個引數。通過在類名之後放置一對圓括號來建立乙個類物件。通過小數點...
Swift中文教程 五 物件和類
原文 swift中文教程 五 物件和類 class 類 在swift中可以用class關鍵字後跟類名建立乙個類。在類裡,乙個屬性的宣告寫法同乙個常量或變數的宣告寫法一樣,除非這個屬性是在類的上下文裡面,否則,方法和函式的寫法也是這樣 1 class shape 6 練習 用let關鍵字新增乙個常量屬...
JS學習四(物件)
1 var object1 物件字面量 object1 2 過new object 建立物件 var obj new object 建立乙個空物件,var arr new array 空陣列,var date new date 日期時間物件 var reg new regexp js 建立正則物件 ...