swift-計算型屬性和存儲型屬性的區別

存儲型屬性:用於存儲一個常量或者變量

class Person1 {
            var name: String = "lili"
            let age: Int = 10

            lazy var p1:Person1 = Person1()     }

// 用lazy 修飾的,是延遲加載,必須用 var 修飾
// 用 var 修飾的 name,可以在外界改變值,而用let 修
// 飾的屬性age,外面不可以改變其值

**簡單來說,存儲型屬性主要就是用來存儲值的

計算型屬性: 計算性屬性不直接存儲值,而是用 get / set 來取值 和 賦值,可以操作其他屬性的變化.

// get 用來取值
// set 用來賦值

class Person2{
   var weight: Int = 10
   var height: Int = 5

   // age 實現了get 和set 方法,可以在外面給這個屬性賦值.
   var age: Int {

    get {
       return height * 3
        }

    set(newValue){  // 或者直接用 newAge
       height = newValue * 5
        }
 }

//如果不實現set 方法,是不能給其賦值的,這種類型的屬於只讀計算屬性.只讀計算屬性是可以省略get 的,直接返回即可.如 size 屬性
 var size: Int{
    return height * 3
    }

//MARK: 計算屬性死循環情況
 /*
  計算屬性值是不固定的,不能用 let 修飾,只能用 var
  計算型屬性不能直接賦值
 */
// 下面的 get 和 set 方法都會導致死循環
  var name: String{

    get {          
     return name // 這裏會調用 get 方法
        }

    set {
     name = newValue // 這裏調用 set 方法
        }
 }
}
發佈了55 篇原創文章 · 獲贊 17 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章