《從零開始學Swift》學習筆記(Day 32)——計算屬性

智捷關東昇發表於2016-03-17

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  計算屬性本身不儲存資料,而是從其他儲存屬性中計算得到資料。

計算屬性概念:
  計算屬性提供了一個getter(取值訪問器)來獲取值,以及一個可選的setter(設定訪問器)來間接設定  其他屬性或變數的值。計算屬性的語法格式如下:
    物件導向型別 型別名 {
     儲存屬性
     ......      var 計算屬性名: 屬性資料型別 {
     get {
     return 計算後屬性值
     }
     set (新屬性值) {
     ......      }
     }
    }
  定義計算屬性比較麻煩,要注意後面的幾個大括號的對齊關係。
我們先看一個示例:

import Foundation    

class Employee {
    var no: Int = 0
    var firstName: String = "Tony"    //儲存屬性
    var lastName: String = "Guan"    //儲存屬性
    var job: String?
    var salary: Double = 0
    lazy var dept: Department = Department()

    var fullName: String {    //計算屬性
    get {
    return firstName + "." + lastName        //返回拼接的結果
    }
    set (newFullName) {    //儲存傳遞進來的引數值
    var name = newFullName.componentsSeparatedByString(".")    
    firstName = name[0]
    lastName = name[1] 
    }
    }
}

struct Department {
    let no: Int = 0
    var name: String = ""
}

var emp = Employee()
print(emp.fullName)         //取出屬性值

emp.fullName = "Tom.Guan"    //給屬性賦值
print(emp.fullName)         

只讀計算屬性:
  計算屬性可以只有getter訪問器,沒有setter訪問器,這就是隻讀計算屬性。指定計算屬性不僅不用寫setter訪問器,而且get{}程式碼也可以省略。與上一節相比,程式碼將大大減少。修改上一節示例為只讀計算屬性,程式碼如下:

class Employee {
    var no: Int = 0
    var firstName: String = "Tony"
    var lastName: String = "Guan"
    var job: String?
    var salary: Double = 0
    lazy var dept: Department = Department()

    var fullName: String {    //簡潔的setter訪問器
    return firstName + "." + lastName
    }                            
}

struct Department {
    let no: Int = 0
    var name: String = ""
}

var emp = Employee()
print(emp.fullName)

只讀計算屬性不能夠賦值,下列語句是錯誤的。

emp.fullName = "Tom.Guan"

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章