Swift之旅(四)物件和類

2021-07-02 07:55:05 字數 3001 閱讀 5181

要定義乙個類,只要在 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()

試一試

加乙個namedshape的子類circle,有radius屬性,並且在初始化器中接收該引數。在circle類裡實現乙個area() 和 ******description() 方法。

除了簡單儲存值外,屬性還可以加getter和setter。

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 建立正則物件 ...