0Pricing
Swift Academy · 课时

可选链 ?. 运算符

在不导致程序崩溃的情况下调用可选值上的方法并访问其属性

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

欢迎

可选值链式调用允许您安全地通过可选值链调用方法、访问属性和使用下标。如果链中的任何一环为 nil,整个表达式都会返回 nil,而不会崩溃。

?. 运算符

```swift struct Address { var city: String } struct Person { var address: Address? } let alice = Person(address: Address(city: "Istanbul")) let bob = Person(address: nil) print(alice.address?.city) // Optional("Istanbul") print(bob.address?.city) // nil ```

链接多个层级

链式调用可以有任意深度: ```swift struct Company { var ceo: Person? } let company = Company(ceo: alice) let city = company.ceo?.address?.city print(city ?? "Unknown") // "Istanbul" ``` 如果 `ceo` 或 `address` 为 nil,`city` 就会变为 nil。

通过链式调用方法

也可以通过可选值链式调用方法: ```swift var name: String? = "alice" let upper = name?.uppercased() // Optional("ALICE") name = nil let upper2 = name?.uppercased() // nil ``` 返回类型会变为可选类型:`String` 会变成 `String?`。

通过链式调用使用下标

```swift var dict: [String: [Int]]? = ["scores": [10, 20, 30]] let first = dict?["scores"]?[0] // Optional(10) dict = nil let none = dict?["scores"]?[0] // nil ``` 在链式调用中,下标的工作方式与属性和方法相同。

链式调用会产生可选值

即使最终结果是非可选值,链式调用也会将其包装为可选值: ```swift struct Cat { var lives: Int = 9 } var cat: Cat? = Cat() let lives = cat?.lives // Int? not Int ``` 请根据需要使用 `??`、`if let` 或 `guard let` 进行解包。

通过链式调用设置值

您可以通过可选链设置属性: ```swift var profile: UserProfile? = UserProfile() profile?.name = "Alice" ``` 如果 `profile` 为空,赋值会被静默忽略,不会发生崩溃。

通过链式调用调用无返回值方法

```swift var manager: SoundManager? manager?.play() // silently ignored if nil ``` 调用会返回 `Void?`:如果不为空,则返回 `()`;如果可选值为空,则返回 `nil`。您可以检查结果,以确定调用是否实际发生。

可选链与强制解包

```swift // Forced unwrap — crashes if nil: let city = alice.address!.city // Optional chaining — safe: let city = alice.address?.city ``` 请始终优先使用可选链。只有在确定不会出现空值时,才使用 `!`。

结合 ?? 提供默认值

您可以在可选链之后连接 `??`,以简洁地提供默认值: ```swift let displayCity = user.profile?.address?.city ?? "Unknown City" let count = database?.records?.count ?? 0 ``` 整个链式调用要么解析为一个值,要么回退到默认值。

快速检查

如果可选链中的任一环节是 `nil`,整个表达式会返回什么?

回顾

要点总结: • `?.` 可以安全地访问属性、调用方法以及对可选值使用下标 • 如果任一环节为空,整个链式调用都会返回空值 • 结果类型始终是可选类型,即使最终值通常不是可选值 • 将 `?.` 与 `??` 结合使用,可以简洁地实现安全访问和默认值处理 • 优先使用 `?.` 而不是 `!`,以避免崩溃 下一课:隐式解包可选值。

常见问题解答

「可选链 ?. 运算符」课时是免费的吗?

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

「可选链 ?. 运算符」这节课中我会学到什么?

在不导致程序崩溃的情况下调用可选值上的方法并访问其属性 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

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

「可选链 ?. 运算符」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. if let 与 guard let 绑定
  2. 可选值的空值合并与三元运算
  3. 可选链 ?. 运算符
  4. 隐式解包可选值及应避免使用的情况
← 返回 Swift Academy