国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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之間必須有空格,不知道編譯器為什么會這樣

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙井市| 洪泽县| 营口市| 光山县| 九寨沟县| 车致| 江口县| 峨眉山市| 台北市| 凤凰县| 门源| 克什克腾旗| 息烽县| 扶沟县| 金华市| 宜兴市| 神农架林区| 虞城县| 顺义区| 元朗区| 昭苏县| 连平县| 门头沟区| 贵德县| 南岸区| 准格尔旗| 芜湖市| 琼海市| 高清| 山丹县| 漳州市| 呈贡县| 城固县| 盐山县| 德安县| 郧西县| 万源市| 通州区| 曲周县| 定边县| 伽师县|