0Pricing
Swift Academy · 课时

结构体中的计算属性

使用仅支持 get 以及支持 get/set 的计算属性派生值。

结构体中的计算属性 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

欢迎

计算属性不会存储值,而是按需计算并返回值。对于调用者来说,它们看起来像属性,但实际上会在底层运行代码。

只读计算属性

```swift struct Circle { var radius: Double var area: Double { .pi * radius * radius } var circumference: Double { 2 * .pi * radius } } var c = Circle(radius: 5) print(c.area) // 78.53... ```

get 和 set

```swift struct Temperature { var celsius: Double var fahrenheit: Double { get { celsius * 9/5 + 32 } set { celsius = (newValue - 32) * 5/9 } } } var t = Temperature(celsius: 0) print(t.fahrenheit) // 32 t.fahrenheit = 212 print(t.celsius) // 100 ```

简写 get——省略 get 关键字

对于只读属性,`get { }` 包装器是可选的: ```swift var area: Double { .pi * radius * radius } // same as { get { ... } } ```

set 中的 newValue

在 `set` 中,传入值默认命名为 `newValue`: ```swift set { celsius = (newValue - 32) * 5/9 } ``` 您也可以显式命名它: ```swift set(degF) { celsius = (degF - 32) * 5/9 } ```

计算属性不会被存储

计算属性没有后备存储空间——每次访问都会运行其中的代码: ```swift struct Stats { var scores: [Int] var average: Double { guard !scores.isEmpty else { return 0 } return Double(scores.reduce(0,+)) / Double(scores.count) } } ```

静态计算属性

```swift struct Config { static var appName: String { Bundle.main.infoDictionary?["CFBundleName"] as? String ?? "App" } } print(Config.appName) ```

协议中的计算属性

```swift protocol Greetable { var greeting: String { get } } struct Person: Greetable { var name: String var greeting: String { "Hello, \(name)!" } } ``` 协议可以要求实现计算属性,只需指定 `{ get }` 或 `{ get set }`。

计算属性与存储属性的性能

• 计算属性:每次访问都会重新计算——避免在频繁读取的属性中进行昂贵的计算 • 对于昂贵的一次性计算值,请使用 `lazy var`: ```swift lazy var thumbnail: UIImage = generateThumbnail() ```

表达式体与代码块

Swift 5.9+ 中的单表达式计算属性会隐式返回值: ```swift var fullName: String { "\(first) \(last)" } // equivalent to: var fullName: String { return "\(first) \(last)" } ```

快速检查

在属性 `set` 代码块中,传入值的默认名称是什么?

总结

主要要点: • 计算属性会在每次访问时运行代码,不使用存储空间 • 只读属性:省略 `get`/`set`,或使用 `{ return ... }` 简写 • 可读写属性:提供 `get` 和 `set(newValue)` 代码块 • 适合表示 `area`、`fullName`、单位转换等派生值 • 对于昂贵的一次性计算值,请使用 `lazy` 接下来:可变方法。

常见问题解答

「结构体中的计算属性」课时是免费的吗?

是的 — 「结构体中的计算属性」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「结构体中的计算属性」这节课中我会学到什么?

使用仅支持 get 以及支持 get/set 的计算属性派生值。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「结构体中的计算属性」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 成员初始化器与自定义初始化器
  2. 存储属性与属性观察器
  3. 结构体中的计算属性
  4. 可变方法与写时复制语义
← 返回 Swift Academy