You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中类为何可使用{ get }声明属性?它不应仅用于协议吗?

Swift类中{ get }属性声明的常见误区

协议与类中{ get }的本质区别

在Swift协议里,{ get }是用来定义属性访问权限要求,比如:

protocol Identifiable {
    var id: String { get }
}

它只要求遵循协议的类型提供一个可读的id属性,具体实现可以是存储属性、只读计算属性,甚至类中的可读写存储属性(因为可读写天然包含可读能力)。

但在类的属性声明中,直接写{ get }属于语法错误——类里的属性需要明确的实现逻辑,而非仅声明权限:

  • 存储属性直接声明类型和默认值(用let实现只读,var实现读写)
  • 计算属性必须写出get代码块的具体逻辑,或者省略get关键字直接返回值(只读计算属性默认隐含get)

你报错的核心原因

当你在类里写var someProperty: Int { get }这类代码时,编译器会报错,因为这不符合类属性的语法规则。协议里的{ get }是“约定”,而类里需要的是“具体实现”,不能只写get而不提供逻辑。

类中实现只读属性的正确方式

如果要在类里创建只读属性,有两种标准写法:

  1. 存储型只读属性:用let声明,初始化后不可修改
class Product {
    let productId: Int
    init(id: Int) {
        productId = id
    }
}
  1. 计算型只读属性:实现get逻辑(或省略get直接返回值)
class Product {
    let productId: Int
    // 省略get关键字的简洁写法
    var productDescription: String {
        return "Product ID: \(productId)"
    }
    // 显式写get的写法(效果一致)
    var anotherDesc: String {
        get {
            return "ID: \(productId)"
        }
    }
}

内容的提问来源于stack exchange,提问作者dyouknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:45:30