0Pricing
Swift Academy · 课时

成员初始化器与自定义初始化器

了解自动生成的成员初始化器,并学习编写自定义初始化器。

成员初始化器与自定义初始化器 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

欢迎

Swift 结构体会自动获得一个成员初始化器,用于接收所有存储属性。不过,您也可以使用自定义的初始化器逻辑对其进行定制或扩展。

自动生成的成员初始化器

```swift struct Point { var x: Double var y: Double } let p = Point(x: 3.0, y: 4.0) // auto-generated init ``` 无需自行编写 `init`——编译器会提供一个。

添加自定义初始化器

```swift struct Circle { var radius: Double var area: Double init(radius: Double) { self.radius = radius self.area = .pi * radius * radius } } let c = Circle(radius: 5.0) ```

保留成员初始化器

定义自定义初始化器会抑制自动生成的成员初始化器。要同时保留两者,请将自定义初始化器放在扩展中: ```swift struct Rect { var width: Double; var height: Double } extension Rect { init(square side: Double) { self.init(width: side, height: side) } } // Both Rect(width:height:) and Rect(square:) available ```

属性默认值

```swift struct Config { var debug = false var maxRetries = 3 var timeout: TimeInterval = 30 } let c1 = Config() // all defaults let c2 = Config(debug: true) // memberwise with overrides ```

使用 self.init 进行初始化器委托

```swift struct Temperature { var celsius: Double init(celsius: Double) { self.celsius = celsius } init(fahrenheit: Double) { self.init(celsius: (fahrenheit - 32) / 1.8) } init(kelvin: Double) { self.init(celsius: kelvin - 273.15) } } ```

可失败初始化器

```swift struct Percentage { let value: Double init?(_ value: Double) { guard (0...100).contains(value) else { return nil } self.value = value } } let p = Percentage(105) // nil ```

带验证的初始化

```swift struct Username { let value: String init?(_ raw: String) { let trimmed = raw.trimmingCharacters(in: .whitespaces) guard trimmed.count >= 3 else { return nil } self.value = trimmed } } ```

结构体初始化器与类初始化器

与类初始化器的主要区别: • 结构体可以使用 `self.init()` 进行委托 • 结构体不会继承初始化器(没有 `super.init()`) • 所有存储属性必须先完成初始化才能使用 • 没有 `required` 或 `designated` / `convenience` 关键字

`init(from decoder:)` 预览

遵循 `Decodable` 的结构体会自动获得初始化器: ```swift struct User: Decodable { let name: String let age: Int } // Auto-synthesised init(from:) for JSON decoding let user = try JSONDecoder().decode(User.self, from: json) ```

快速检查

应将自定义初始化器放在哪里,才能保留自动生成的成员初始化器?

总结

主要要点: • 编译器会为结构体免费生成成员初始化器 • 在结构体主体中定义自定义初始化器会抑制成员初始化器 • 将自定义初始化器放在扩展中即可同时保留两者 • 使用 `self.init()` 在初始化器之间进行委托 • 可失败初始化器会在输入无效时返回 `nil` 接下来:存储属性和属性观察器。

常见问题解答

「成员初始化器与自定义初始化器」课时是免费的吗?

是的 — 「成员初始化器与自定义初始化器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「成员初始化器与自定义初始化器」这节课中我会学到什么?

了解自动生成的成员初始化器,并学习编写自定义初始化器。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

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

「成员初始化器与自定义初始化器」课时需要多长时间?

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

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

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

此课程中的所有课时

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