原文:swift中文教程(五)--物件和類
class 類
在swift中可以用class關鍵字後跟類名建立乙個類。在類裡,乙個屬性的宣告寫法同乙個常量或變數的宣告寫法一樣,除非這個屬性是在類的上下文裡面,否則,方法和函式的寫法也是這樣:
1class
shape
6 }
練習:在類名後面加小括號來建立類的例項化,使用.(點號連線符)來訪問例項的方法和屬性:用let關鍵字新增乙個常量屬性,新增另乙個方法用來接收引數。
1 var shape =shape()2 shape.numberofsides = 7
3 var shapedescription = shape.******description()
這個版本的shape類缺少乙個重要的東西:構造器--類被建立後的設定。可以使用init來建立乙個:
1class
namedshape
89 func ******description() ->string
12 }
注意,此處的self是用來區分構造器內的name引數和name屬性的。建立類的例項時,構造器裡的引數傳遞和函式的引數傳遞形式是一樣的。每個屬性都需要為其指定乙個值,無論是在宣告中(如nameofsides),或是在構造器內(如name)。
使用 deinit 來建立乙個析構器,來執行物件銷毀時的清理工作。
繼承和多型
子類可以加冒號後直接跟超類名,子類宣告時並不需要非得制定任何標準基類,所以子類後的超類可以被忽略。
子類的方法覆蓋或過載超類中的實現要加上override標記,否則,編譯器會報錯,編譯器也會檢測被標記為override的過載方法到底有沒有覆蓋到超類。
1class
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方法:
1class
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(之後)。如下例中的類--確保三角形的邊長始終與矩形邊長相等:
1class
********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
類的方法與函式有乙個重要的區別:函式的引數名僅作用於此函式內,而方法的引數名可以用於呼叫方法(第乙個引數除外)。預設時,乙個方法有乙個同名的引數,呼叫時就是方法本身。你可以指定第二個名字,在方法內部使用:
1class
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...