首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Swift 計算屬性詳解:Getter/Setter、只讀屬性與簡化寫法

     編輯:關於C

Swift 的計算屬性 不直接存儲值,而是提供 getter 和可選的 setter 來間接獲取和設置其他屬性或值。結構體、類、枚舉均可定義計算屬性,相當於 Objective-C 中 getter/setter 合成的屬性。本文系統講解定義語法、枚舉/類實例、setter 簡化、只讀屬性等核心知識點。

計算屬性語法

[修飾符] var 屬性名: 類型 {
    get {
        // 必須返回值
    }
    set(參數名) {  // 參數名可省略,默認 newValue
        // 無返回值
    }
}

枚舉中的計算屬性示例

enum Season {
    case Spring, Summer, Fall, Winter

    var info: String {
        get {
            print("正在執行 getter 方法")
            switch self {
            case .Spring: return "春暖花開"
            default: return "此恨綿綿無絕期"
            }
        }
        set(newValue) {
            print("正在執行 setter 方法,傳入參數為: \(newValue)")
        }
    }
}

var s = Season.Spring
print(s.info)        // 訪問 -> 調用 getter
s.info = "秋高氣爽"   // 賦值 -> 調用 setter

類中的計算屬性示例

class User {
    var first: String = ""
    var last: String = ""

    var fullName: String {
        get {
            return first + "-" + last
        }
        set(newValue) {
            let names = newValue.components(separatedBy: "-")
            self.first = names[0]
            self.last = names[1]
        }
    }

    init(first: String, last: String) {
        self.first = first
        self.last = last
    }
}

let user = User(first: "六小齡童", last: "孫悟空")
print(user.fullName)        // 六小齡童-孫悟空
user.fullName = "甄子丹-悟空"
print(user.first)  // 甄子丹
print(user.last)   // 悟空

Setter 簡化寫法

當 setter 參數名為默認 newValue 時,可省略參數聲明:

set {
    let names = newValue.components(separatedBy: "-")
    self.first = names[0]
    self.last = names[1]
}

只讀計算屬性

僅包含 getter 時,可省略 get 關鍵字和大括號:

var fullName: String {
    return first + "-" + last
}
// 等價於
var fullName: String {
    get { return first + "-" + last }
}

注意:即使是只讀屬性,也必須用 var 聲明,不可用 let。

存儲屬性 vs 計算屬性

特性存儲屬性計算屬性
本質在內存中分配空間存值不存值,通過代碼計算/轉發
聲明var/let 名: 類型 = 初值var 名: 類型 { get/set }
觀察器支持 willSet/didSet不支持(邏輯在 setter 中實現)
適用場景直接持有數據衍生數據、封裝訪問邏輯、跨屬性聯動

總結

計算屬性是 Swift 封裝與抽象的強大工具:

  • getter 實現只讀或衍生值讀取;
  • setter 實現賦值時的副作用(如拆分合併、驗證、觸發更新);
  • 只讀簡化 讓代碼更簡潔;
  • 枚舉/結構體/類 均支持,體現協議導向設計的統一性。

善用計算屬性,能讓模型層邏輯更內聚、介面更乾淨。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved