麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

ASwiftTour(4)-ObjectsandClasses

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

Objects and Classes(對象和類)

用 class 關鍵字后面跟一個類名來創建一個class,在一個類中聲明 常亮或變量,他存在于當前類的上下文,函數的方法是同樣的

var numberOfSides = 0    let numberOfSidesLet = 1        func simpleDescription() -> String    {        return "A shape with /(numberOfSides)  /(numberOfSidesLet) sides."    }    

通過括號的方式來創建一個類實例,使用點語法來訪問該實例的屬性和方法

var shape = Shape()shape.numberOfSides=10var str = shape.simpleDescription()PRintln(str)

吐槽一下,不知道是xcode6 bate版本問題還是什么原因,寫代碼的提示功能特別差

這個版本的一個重要的修改:在創建的時候設置初始值的項,使用init來創建,如下:

 1 class Shape { 2      3     var name:String 4      5     init(name:String) 6     { 7         self.name = name 8     } 9     10     var numberOfSides = 011     let numberOfSidesLet = 112     13     14     func simpleDescription() -> String15     {16         return "A shape with /(numberOfSides)  /(numberOfSidesLet) sides."17     }18 }

請注意 self 關鍵字用來區分 屬性name 和 參數 name(這個和oc中的還是一樣)

如果你要釋放一些對象,那么需要創建一個deinitializer,使用deinit來釋放資源

子類和父類之間用 冒號分開,在繼承標準的子類時,不需要聲明,所以可以根據需要來忽略或者包括父類

子類重寫父類的方法要使用overside關鍵字(C#,java比較相似),如果沒有重載,則會提示錯誤

class Square: Shape {       var sideLength: Double        init(sideLength:Double,name:String)    {        self.sideLength = sideLength        super.init(name:name)        numberOfSides = 4    }        func area() -> Double    {        return sideLength * sideLength    }        override func simpleDescription() -> String    {        return "A square with sides of length /(sideLength)"    }} var square = Square(sideLength:10.1,name:"my test") square.area() var str = square.simpleDescription() println(str)

除了簡單的屬性,屬性也可以有getter 和 setter方法

 1 class EquilateralTriangle: Shape { 2     3     var sideLength:Double = 0.0 4      5     init(sideLength:Double,name:String) 6     { 7         self.sideLength = sideLength 8         super.init(name:name) 9         numberOfSides=310     }11     12     var perimeter:Double13     {14         get{15             return 3.0*sideLength16         }17         set18         {19             sideLength = newValue/3.020         }21     }22     23     override func simpleDescription()->String24     {25         return "An equilateral triagle with sides of length /(sideLength)"26     }27 }28  var triangle = EquilateralTriangle(sideLength:3.1,name:"a triangle")29  println(triangle.perimeter)30  triangle.perimeter = 9.931  println(triangle.sideLength)

在perimeter的setter方法中,新值得隱式名稱是newValue,你可以在setter之后提供一個名字

初始化EquilateralTriangle類有三步:

1. 設置屬性的值

2. 調用父類的構造方法(init)

3. 改變父類定義的屬性值,其他的方法也可以在這里設置

如果你不需要計算屬性,但是在setter之前或者之后執行,可以使用willSet和didSet,例如:下面的類永遠保證三角形的邊長等于正方形的邊長

class TriangleAndSquare {       var triangle:EquilateralTriangle    {    willSet    {        square.sideLength = newValue.sideLength    }    }        var square:Square    {     willSet     {        triangle.sideLength = newValue.sideLength    }    }        init(size:Double,name:String)    {        square = Square(sideLength:size,name:name)        triangle = EquilateralTriangle(sideLength:size,name:name)    }}        var triangleAndSquare = TriangleAndSquare(size:10,name:"ray test shape")        println(triangleAndSquare.square.sideLength)        println(triangleAndSquare.triangle.sideLength)        triangleAndSquare.square = Square(sideLength:50,name:"larger square")        println(triangleAndSquare.triangle.sideLength)        println(triangleAndSquare.square.sideLength)//打印出來的值為:10.0,10.0,50.0,50.0

函數和方法有一個不同點,函數的參數名只能在函數中使用,but parameters names in methods are also used when you call the method (except for the first parameter). By default, a method has the same name for its parameters when you call it and within the method itself. You can specify a second name, which is used inside the method(這個不知道怎么翻譯)

 1 class Counter { 2     3     var count:Int = 0 4     func incrementBy(amount:Int,numberOfTimes times:Int) 5     { 6         count += amount*times 7     } 8 } 9  var counter = Counter()10  counter.incrementBy(2,numberOfTimes:7)11         

當使用可選值時,可以像方法屬性一樣在操作符前使用問號(?),如果值本來就是nil,那所有在?之后的代碼將會忽略,整個表達式都是nil,Otherwise, the optional value is unwrapped, and everything after the ? acts on the unwrapped value. In both cases, the value of the whole expression is an optional value.

1  let optionalSquare :Square?=Square(sideLength:2.5,name:"optional square")2  let sideLength = optionalSquare?.sideLength  //注意:等號和optionalSquare之間必須有空格,不知道編譯器為什么會這樣

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费av网站观看 | 国产精品久久久久久久亚洲按摩 | 91av国产在线 | 自拍偷拍999 | 泰剧19禁啪啪无遮挡大尺度 | 狠狠99 | 久久久久久久久久久综合 | 中国av免费在线观看 | 91av大片 | 国产精品免费久久久久 | av手机在线免费播放 | 91久久国产露脸精品国产护士 | 91久久久久 | www.99re1.com| 欧美a级大胆视频 | 国产 视频 一区二区 | 一区二区三区日本在线观看 | 黄色av一区二区三区 | 欧美五月婷婷 | 中文字幕一区二区三区久久 | 亚洲成人在线视频网站 | 日韩精品a在线观看 | 毛片大全免费 | 性感美女一级毛片 | 一级黄色电影网站 | 久久亚洲网 | 国产欧美精品一区二区三区四区 | 在线亚洲免费视频 | 久久精品日韩一区 | 亚洲欧美日韩精品久久 | 亚洲午夜在线视频 | 欧美一级爱爱 | 自拍偷拍999| 亚洲精品成人在线视频 | 国产在线观看一区二区三区 | 国产成年人网站 | 黄在线观看| 久久久久久久久久性 | 精品成人av一区二区三区 | 久草在线公开视频 | 欧美淫交|