Swift 中的存储属性和计算属性

/// 类中如果有非可选属性,需要进行处理;要么声明的时候就直接初始化,要么提供初始化方法来初始化声明的非可选变量
class Animal: NSObject {
    /// 存储属性:值的获取和存储通过自身完成,不依赖其他的变量
    // 名字
    var name: String, // 提供初始化方法进行初始化
        age: Int = 0 // 声明的时候直接初始化
        
    // 可选属性没有初始化默认值是 nil
    var address: String?,
        postCode: Int?
    
    /// 计算属性(读、写):不通过变量自己本身进行值的获取和存储,值的获取和存储依赖其他变量,计算属性需要声明类型,同时,计算属性不能使用 let 关键字
    var virtualAge: Int {
        get {
            return age
        }
        // 可以声明一个变量,也可以不声明变量,使用 `newValue` 代替
        // set (myValue) {
        //    age = myValue * 4
        //}
        set {
              age = newValue * 4
        }
    }
    
    /// 计算属性(只读),计算属性需要声明类型
    var actualAge: Int {
        get {
            return age * 8
        }
    }
    
    /// 计算属性(只读),计算属性需要声明类型
    /// 省略 get
    var virtual: Int {
        return age * 8
    }
    
    /// 计算属性(只读),计算属性需要声明类型
    /// 省略 return
    var actual: Int {
        age * 8
    }
    
    // 初始化方法
    init(_ nameStr: String) {
        self.name = nameStr
    }
}

计算属性跟存储属性的区别:

  1. 计算属性值的获取跟存储不是由自身完成的,需要其他的存储属性。即计算属性本身是不能存储属性的;
  2. 存储属性值的存储通过自身就可以完成;

你可能感兴趣的:(Swift 中的存储属性和计算属性)