Swift學(xué)習(xí)二 類和對象

 //使用class 和類名來創(chuàng)建一個類愧捕,類中屬性的聲明和常量酌泰,變量聲明一樣荠察,唯一的區(qū)別就是它們的上下文是類,同樣,方法和函數(shù)聲明也一樣
    class Shape {
        
        var numberOfSides = 0
        func simpleDescription() -> String {
            return "A shap with \(numberOfSides) sides."
        }
        
    }

    //要創(chuàng)建一個類的實(shí)例,在類后面加上括號,使用點(diǎn)語法來訪問實(shí)例的屬性和方法
    let shape = Shape()
    shape.numberOfSides = 7
    let shapeDescription = shape.simpleDescription()
    
    print(shapeDescription)
    
    
    //使用init來創(chuàng)建一個構(gòu)造器
    class NameShape {
    
        var numberOfSides:NSInteger = 0
        var name : String
        init(name:String) {
            self.name = name
        }
        
        func simpleDescription() -> String {
            
            return "A shape with \(numberOfSides) \(name) sides."
            
        }
        
    }
    //注意self被用來區(qū)別實(shí)例變量壶冒,當(dāng)你創(chuàng)建實(shí)例的時候,像傳入函數(shù)參數(shù)一樣給類傳入構(gòu)造器的參數(shù)截歉,每個屬性都需要賦值-無論是通過聲明(就像numberOfSides   還是通過構(gòu)造器)
    let nameShape = NameShape(name:"hello")
    nameShape.numberOfSides = 10
    let nameshapeDis = nameShape.simpleDescription()
    print(nameshapeDis)
    
    
    //如果需要在刪除對象之前進(jìn)行一些清理工作胖腾,使用deinit創(chuàng)建一個析構(gòu)函數(shù)。子類的定義方法是在它們的類名后面加上父類的名字怎披,用冒號分割胸嘁。創(chuàng)建類的時候并不需要一個標(biāo)準(zhǔn)的根類,所以你可以忽略父類凉逛。子類如果要重寫父類的方法的話,需要用override標(biāo)記--如果沒有添加override就重寫父類方法的話編譯器會報錯群井,編譯器同樣會檢測override標(biāo)記的方法是否確實(shí)在父類中
    class Square:NameShape {
    
        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 "B square with sides of length \(sideLength)"
        }
    }
    
    let test = Square(sideLength:5.2,name:"my test squate")
    
    print(test.area(),test.simpleDescription())
    
    
    //除了儲存簡單的屬性之外状飞,屬性可以有g(shù)etter 和 setter 。
    class EquilateralTriangle:NameShape {
    
        var sideLength:Double = 0.0
        init(sideLength:Double,name:String) {
            self.sideLength = sideLength
            super.init(name: name)
            numberOfSides = 3
        }
        
        var perimeter:Double {
        
            get{
            
                return 3.0 * sideLength
                
            }
            set{
            
                sideLength = newValue / 3.0
            }
        }
        
    override func simpleDescription() -> String {
            return "An equilateral triagle with sides of length \(sideLength)."
        }
        
    }
    var triangle = EquilateralTriangle(sideLength:3.1,name:"a triangle")
    print(triangle.perimeter)
    triangle.perimeter = 9.9
    print(triangle.sideLength)
    
    //在perimeter 的 setter 中书斜,新值得名字是newValue诬辈。你可以在set之后顯示的設(shè)置一個名字
    //注意 EquilateralTriangle,類的構(gòu)造器執(zhí)行了三步:1荐吉,設(shè)置子類聲明的屬性值焙糟,2:調(diào)用父類的構(gòu)造器,3:改變父類定義的屬性值样屠。其他的工作比如調(diào)用方法穿撮,getters和setters也可以在這個階段完成。
    
    //如果不需要計(jì)算屬性痪欲,但是任然需要在設(shè)置一個新值之前或者之后運(yùn)行代碼悦穿,使用willSet和didSet。
    //比如业踢,下面的類確保三角形的邊長總是和正方形的邊長相同
    
    class TriangleAndSuqare {
    
        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)
        }
        
    }
    
    let triangleAndSquare = TriangleAndSuqare(size: 10, name: "another test shape")
    print(triangleAndSquare.square.sideLength)
    print(triangleAndSquare.triangle.sideLength)
    triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
    print(triangleAndSquare.triangle.sideLength)
    
   //處理變量的可選值時栗柒,可以在操作(比如方法,屬性知举,和子腳本)之前加瞬沦?,如果雇锡?之前的值是nil逛钻,?后面的東西都會被忽略遮糖,并且整個表達(dá)式返回nil绣的,否則,?之后的東西都會被運(yùn)行屡江,在這兩種情況下芭概,整個表達(dá)式的值也是一個可選值
    let optionalSquare:Square? = Square(sideLength:2.5,name:"optional square")
    let sideLength = optionalSquare?.sideLength
    
    print(sideLength ?? 2)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惩嘉,隨后出現(xiàn)的幾起案子罢洲,更是在濱河造成了極大的恐慌,老刑警劉巖文黎,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惹苗,死亡現(xiàn)場離奇詭異,居然都是意外死亡耸峭,警方通過查閱死者的電腦和手機(jī)桩蓉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劳闹,“玉大人院究,你說我怎么就攤上這事”咎椋” “怎么了业汰?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菩颖。 經(jīng)常有香客問我样漆,道長,這世上最難降的妖魔是什么晦闰? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任放祟,我火速辦了婚禮,結(jié)果婚禮上鹅髓,老公的妹妹穿的比我還像新娘舞竿。我一直安慰自己,他們只是感情好窿冯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布骗奖。 她就那樣靜靜地躺著,像睡著了一般醒串。 火紅的嫁衣襯著肌膚如雪执桌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天芜赌,我揣著相機(jī)與錄音仰挣,去河邊找鬼。 笑死缠沈,一個胖子當(dāng)著我的面吹牛膘壶,可吹牛的內(nèi)容都是我干的错蝴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼颓芭,長吁一口氣:“原來是場噩夢啊……” “哼顷锰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亡问,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤官紫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后州藕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體束世,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年床玻,在試婚紗的時候發(fā)現(xiàn)自己被綠了毁涉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡笨枯,死狀恐怖薪丁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馅精,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布粱檀,位于F島的核電站洲敢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茄蚯。R本人自食惡果不足惜压彭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渗常。 院中可真熱鬧壮不,春花似錦、人聲如沸皱碘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癌椿。三九已至健蕊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踢俄,已是汗流浹背缩功。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留都办,地道東北人嫡锌。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓虑稼,卻偏偏與公主長得像目锭,于是被迫代替她去往敵國和親雄嚣。 傳聞我的和親對象是個殘疾皇子底洗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容