亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Swift中文教程(五)--對象和類

2019-11-14 20:26:14
字體:
來源:轉載
供稿:網友

  

 

  Class 類

 

  在Swift中可以用class關鍵字后跟類名創建一個類。在類里,一個屬性的聲明寫法同一個常量或變量的聲明寫法一樣,除非這個屬性是在類的上下文里面,否則,方法和函數的寫法也是這樣:

1 class Shape {2     var numberOfSides = 03     func simpleDescription() -> String {4         return "A shape with /(numberOfSides) sides."5     }6 }

練習:

用let關鍵字添加一個常量屬性,添加另一個方法用來接收參數。

 

  在類名后面加小括號來創建類的實例化,使用.(點號連接符)來訪問實例的方法和屬性:

1 var shape = Shape()2 shape.numberOfSides = 73 var shapeDescription = shape.simpleDescription()

 

  這個版本的Shape類缺少一個重要的東西:構造器--類被創建后的設置。可以使用init來創建一個:

 1 class NamedShape { 2     var numberOfSides: Int = 0 3     var name: String 4      5     init(name: String) { 6         self.name = name 7     } 8      9     func simpleDescription() -> String {10         return "A shape with /(numberOfSides) sides."11     }12 }

  注意,此處的self是用來區分構造器內的name參數和name屬性的。創建類的實例時,構造器里的參數傳遞和函數的參數傳遞形式是一樣的。每個屬性都需要為其指定一個值,無論是在聲明中(如nameOfSides),或是在構造器內(如name)。

  使用 deinit 來創建一個析構器,來執行對象銷毀時的清理工作。

 

  繼承和多態

 

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

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

 

 1 class Square: NamedShape {//接上一例,NamedShape為超類 2     var sideLength: Double 3      4     init(sideLength: Double, name: String) { 5         self.sideLength = sideLength 6         super.init(name: name) 7         numberOfSides = 4 8     } 9     10     func area() ->  Double {11         return sideLength * sideLength12     }13     14     override func simpleDescription() -> String {//在此處用override重載了上一例中超類NameSpace的方法simpleDescription15         return "A square with sides of length /(sideLength)."16     }17 }18 let test = Square(sideLength: 5.2, name: "my test square")19 test.area()20 test.simpleDescription()

 

練習:

編寫另一個NamedShape的子類:Circle ,傳入半徑和名字作為參數到其構造器,并在Circle類中實現area和describe方法。

  此外,聲明過的屬性通常還有一個get和一個set方法:

 1 class EquilateralTriangle: NamedShape { 2     var sideLength: Double = 0.0 3      4     init(sideLength: Double, name: String) { 5         self.sideLength = sideLength 6         super.init(name: name) 7         numberOfSides = 3 8     } 9     10     var perimeter: Double {11     get {12         return 3.0 * sideLength13     }14     set {15         sideLength = newValue / 3.016     }17     }18     19     override func simpleDescription() -> String {20         return "An equilateral triagle with sides of length /(sideLength)."21     }22 }23 var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")24 triangle.perimeter25 triangle.perimeter = 9.926 triangle.sideLength

  

  上例中,perimeter的set中值的默認名是newValue,你可以再set后面以小括號的方式為其指定其它的名字。

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

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

    第二步,調用超類的構造器;

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

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

 1 class TriangleAndSquare { 2     var triangle: EquilateralTriangle { 3     willSet { 4         square.sideLength = newValue.sideLength 5     } 6     } 7     var square: Square { 8     willSet { 9         triangle.sideLength = newValue.sideLength10     }11     }12     init(size: Double, name: String) {13         square = Square(sideLength: size, name: name)14         triangle = EquilateralTriangle(sideLength: size, name: name)15     }16 }17 var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")18 triangleAndSquare.square.sideLength19 triangleAndSquare.triangle.sideLength20 triangleAndSquare.square = Square(sideLength: 50, name: "larger square")21 triangleAndSquare.triangle.sideLength

 

  類的方法與函數有一個重要的區別:函數的參數名僅作用于此函數內,而方法的參數名可以用于調用方法(第一個參數除外)。缺省時,一個方法有一個同名的參數,調用時就是方法本身。你可以指定第二個名字,在方法內部使用:

1 class Counter {2     var count: Int = 03     func incrementBy(amount: Int, numberOfTimes times: Int) {4         count += amount * times5     }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,同好者進~ 

github地址:https://github.com/Joejo/Swift-lesson-for-chinese

 

 

  

 

 

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品嫩草影院久久| 国产成人精品久久亚洲高清不卡| 成人激情视频小说免费下载| 日韩美女视频中文字幕| 久久99热这里只有精品国产| 久久精品小视频| 亚洲欧美另类在线观看| 国产在线观看91精品一区| 亚洲第一级黄色片| 日韩精品免费在线| 亚洲精品日韩欧美| 欧美激情视频三区| 亚洲在线免费视频| 色偷偷av一区二区三区| 麻豆国产va免费精品高清在线| 97香蕉超级碰碰久久免费的优势| 国语自产精品视频在线看抢先版图片| 欧美亚洲一区在线| 国产精品亚洲自拍| 久久精品国产视频| 国产精品7m视频| 在线视频日韩精品| 国产视频观看一区| 久久久精品在线| 国产成人一区二区三区小说| 中文字幕成人精品久久不卡| 97在线精品国自产拍中文| 色天天综合狠狠色| 国产精品永久免费视频| 青青草一区二区| 久久久黄色av| 欧美激情视频在线免费观看 欧美视频免费一| 91国产视频在线| 国产中文日韩欧美| 91精品国产一区| 国产日韩欧美夫妻视频在线观看| 日韩高清欧美高清| 国产一区二区日韩| 97视频在线观看视频免费视频| 庆余年2免费日韩剧观看大牛| 日韩免费观看视频| 日韩成人网免费视频| 日韩精品免费视频| 国产精品日韩电影| 日韩av在线网站| 亚洲美女在线观看| 欧美自拍视频在线| 亚洲经典中文字幕| 欧美性高潮在线| 成人黄色午夜影院| 亚洲性生活视频在线观看| 性色av香蕉一区二区| 亚洲日韩中文字幕在线播放| 国语自产精品视频在线看一大j8| 日韩美女写真福利在线观看| 欧美成人精品在线观看| 在线视频欧美性高潮| 亚洲日本成人网| 欧美激情久久久| 久热精品视频在线观看| 亚洲欧美另类国产| 欧美成人免费播放| 国产日韩精品在线观看| 国产一区二中文字幕在线看| 国产亚洲人成网站在线观看| 91成人精品网站| 91精品国产一区| 国产精品色午夜在线观看| 久青草国产97香蕉在线视频| 久久久久久69| 亚洲免费影视第一页| 日本不卡高字幕在线2019| 91日本视频在线| 久久激情视频免费观看| 中文日韩在线观看| 国产精品美腿一区在线看| www.精品av.com| 日韩经典一区二区三区| 欧美放荡办公室videos4k| 欧美午夜精品久久久久久浪潮| 欧美在线视频在线播放完整版免费观看| 日韩中文在线中文网三级| 欧美在线观看一区二区三区| 国产精品jvid在线观看蜜臀| 日韩人体视频一二区| 亚洲午夜av电影| 国产精品自拍网| 国产精品电影网| 国产成人综合精品在线| 2019中文字幕在线| 欧美成年人网站| 欧美综合在线第二页| 欧美老妇交乱视频| 亚洲欧美国产日韩中文字幕| 亚洲成人中文字幕| 九色成人免费视频| 亚洲免费视频一区二区| 欧美精品aaa| 影音先锋欧美精品| 久久成人国产精品| 日韩电视剧免费观看网站| 26uuu日韩精品一区二区| 国产精品视频久| 国产精品你懂得| 狠狠干狠狠久久| 亚洲va电影大全| 国产一区二区三区18| 国产精品极品美女在线观看免费| 亚洲国产婷婷香蕉久久久久久| 亚洲情综合五月天| 91九色国产视频| 亚洲精品午夜精品| 欧美亚洲一级片| 国产97色在线|日韩| 国产亚洲精品日韩| 中文字幕国内精品| 好吊成人免视频| 亚洲成成品网站| 日韩精品视频在线观看免费| 欧美国产亚洲精品久久久8v| 亚洲深夜福利网站| 中文字幕欧美专区| 97**国产露脸精品国产| 国产精品尤物福利片在线观看| 欧美性xxxxhd| 国产精品久久久久久久久| 中文字幕av一区| 久久免费国产视频| 中文字幕欧美视频在线| 日韩精品免费在线| 亚洲网在线观看| 精品国产一区二区三区久久狼黑人| 中文字幕久久久| 一区二区三区高清国产| 日韩av一区二区在线| 性亚洲最疯狂xxxx高清| 欧美日韩在线视频首页| 国产亚洲精品美女久久久| 在线看日韩欧美| 韩国欧美亚洲国产| 色999日韩欧美国产| 日韩成人中文字幕| 色爱av美腿丝袜综合粉嫩av| 色av中文字幕一区| 国产视频精品一区二区三区| 欧美成人免费va影院高清| 亚洲国产精品va| 精品久久久久久中文字幕一区奶水| 国内精品视频一区| 欧美激情久久久久久| 欧美电影免费观看网站| 777午夜精品福利在线观看| 欧美性少妇18aaaa视频| 欧美野外猛男的大粗鳮| 久久久久久久久久国产精品| 精品久久久999| 久热精品视频在线| 青青久久av北条麻妃黑人| 日韩免费在线视频| 欧美极品美女电影一区| 欧美日韩国产中文字幕| 日韩精品视频免费专区在线播放| 欧美体内谢she精2性欧美| 久久久91精品国产一区不卡|