Swift中文教程 五 物件和類

2021-09-06 15:59:40 字數 3258 閱讀 2308

原文:swift中文教程(五)--物件和類

class 類

在swift中可以用class關鍵字後跟類名建立乙個類。在類裡,乙個屬性的宣告寫法同乙個常量或變數的宣告寫法一樣,除非這個屬性是在類的上下文裡面,否則,方法和函式的寫法也是這樣:

1

class

shape

6 }

練習:

用let關鍵字新增乙個常量屬性,新增另乙個方法用來接收引數。

在類名後面加小括號來建立類的例項化,使用.(點號連線符)來訪問例項的方法和屬性:

1 var shape =shape()

2 shape.numberofsides = 7

3 var shapedescription = shape.******description()

這個版本的shape類缺少乙個重要的東西:構造器--類被建立後的設定。可以使用init來建立乙個:

1

class

namedshape

89 func ******description() ->string

12 }

注意,此處的self是用來區分構造器內的name引數和name屬性的。建立類的例項時,構造器裡的引數傳遞和函式的引數傳遞形式是一樣的。每個屬性都需要為其指定乙個值,無論是在宣告中(如nameofsides),或是在構造器內(如name)。

使用 deinit 來建立乙個析構器,來執行物件銷毀時的清理工作。

繼承和多型

子類可以加冒號後直接跟超類名,子類宣告時並不需要非得制定任何標準基類,所以子類後的超類可以被忽略。

子類的方法覆蓋或過載超類中的實現要加上override標記,否則,編譯器會報錯,編譯器也會檢測被標記為override的過載方法到底有沒有覆蓋到超類。

1

class

square: namedshape

910 func area() ->double

1314 override func ******description() ->string 17}

18 let test = square(sidelength: 5.2, name: "

my test square")

19test.area()

20 test.******description()

練習:

編寫另乙個namedshape的子類:circle,傳入半徑和名字作為引數到其構造器,並在circle類中實現area和describe方法。

此外,宣告過的屬性通常還有乙個get和乙個set方法:

1

class

equilateral********: namedshape 910

var perimeter: double

14set 17}

1819 override func ******description() ->string 22}

23 var ******** = equilateral********(sidelength: 3.1, name: "

a ********")

24********.perimeter

25 ********.perimeter = 9.9

26 ********.sidelength

上例中,perimeter的set中值的預設名是newvalue,你可以再set後面以小括號的方式為其指定其它的名字。

請注意,equilateral********類的構造器有三個不同的步驟:

第一步,設定子類各個屬性的值;

第二步,呼叫超類的構造器;

第三步,改變超類中定義的屬性的值,其它的方法,get,set等都可以在此一步驟實行。

如果你不需要計算屬性的值,但是想在設定屬性值之前或之後執行**,那麼你可以使用willset(之前)和didset(之後)。如下例中的類--確保三角形的邊長始終與矩形邊長相等:

1

class

********andsquare 6}

7var square: square 11}

12init(size: double, name: string) 16}

17 var ********andsquare = ********andsquare(size: 10, name: "

another test shape")

18********andsquare.square.sidelength

19********andsquare.********.sidelength

20 ********andsquare.square = square(sidelength: 50, name: "

larger square")

21 ********andsquare.********.sidelength

類的方法與函式有乙個重要的區別:函式的引數名僅作用於此函式內,而方法的引數名可以用於呼叫方法(第乙個引數除外)。預設時,乙個方法有乙個同名的引數,呼叫時就是方法本身。你可以指定第二個名字,在方法內部使用:

1

class

counter 6}

7 var counter =counter()

8 counter.incrementby(2, numberoftimes: 7)

當與可選值(詳見第三章的if語句介紹)一起工作時,你可以在方法或屬性前寫 "?" 操作符。如果值在"?"之前就已經是 nil ,所有在 "?" 之後的都會自動忽略,而整個表示式是 nil 。另外,可選值是未封裝的,所有 "?" 之後的都作為未封裝的值。在這兩種情況中,整個表示式的值是可選值:

1 let optionalsquare: square? = square(sidelength: 2.5, name: "

optional square

")//?可選值的介紹詳見第三章的if語句部分2 let sidelength = optionalsquare?.sidelength

謝謝,swifter-qq群:362232993,同好者進~ 

Swift之旅(四)物件和類

要定義乙個類,只要在 class 後面加上類名即可。在類中定義屬性的寫法與定義常量和變數一樣,只不過它是在類的範圍裡。同樣,方法的定義和函式定義是一樣的寫法。class shape 試一試 用 let 增加乙個常量屬性,再加乙個有乙個引數的方法。要建立類的例項,只需在類名後加上括號就可以了。用句點來...

Swift2學習 Swift概覽4 物件和類

物件和類 使用class並在其後面跟著類名來建立乙個類。類中常量或者變數已同樣的方法宣告,除非他是類的上下文 類之外 同樣的,方法和類以同樣的方式宣告。class shape 練習 通過let新增乙個常量屬性,並新增另外乙個方法來使用這個引數。通過在類名之後放置一對圓括號來建立乙個類物件。通過小數點...

C Primer知識系列五 物件和類

物件導向程式設計特性 抽象 封裝和資料隱藏 多型 繼承 的可重用性。class stock public 表示組成的公共介面的類成員 抽象 void acquire const char co void buy int num 封裝 將抽象與實現分開 void stock acquire const...