原創文章,歡迎轉載。轉載請註明:關東昇的博客php
計算屬性自己不存儲數據,而是從其餘存儲屬性中計算獲得數據。java
計算屬性概念:微信
計算屬性提供了一個getter(取值訪問器)來獲取值,以及一個可選的setter(設置訪問器)來間接設置其餘屬性或變量的值。計算屬性的語法格式以下:網站
面向對象類型 類型名 { 存儲屬性 ...... var 計算屬性名: 屬性數據類型 { get { return 計算後屬性值 } set (新屬性值) { ...... } } }
定義計算屬性比較麻煩,要注意後面的幾個大括號的對齊關係。spa
咱們先看一個示例:.net
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{}代碼也能夠省略。與上一節相比,代碼將大大減小。修改上一節示例爲只讀計算屬性,代碼以下:code
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)
只讀計算屬性不可以賦值,下列語句是錯誤的。component
emp.fullName = "Tom.Guan" 對象
歡迎關注關東昇新浪微博@tony_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php