swift 闭包捕获列表

以下函数会打印出什么?

复制代码
var car = "Benz" 
let closure = { [car] in 
  print("I drive \(car)")
} 
car = "Tesla" 
closure()

因为 clousre 已经申明将 car 复制进去了([car]),此时clousre 里的 car 是个局部变量,不再与外面的 car有关,所以会打印出"I drive Benz"。 此时面试官微微一笑,将题目略作修改如下:

复制代码
var car = "Benz" 
let closure = {
  print("I drive \(car)")
} 
car = "Tesla" 
closure()

此时closure没有申明复制拷贝car,所以clousre用的还是全局的car变量,此时将会打印出 "I drive Tesla"

相关推荐
大熊猫侯佩1 天前
10 个 Xcode 神技:哥谭开发者必学的 IDE 对抗术
xcode·swift·apple
HarderCoder1 天前
Swift Package Command Plugin 实战:一键生成 Package 元数据
swift
低调小一1 天前
Swift 语法学习指南 - 与 Kotlin 对比
微信·kotlin·swift
HarderCoder1 天前
Swift Package Plugin 深度实战:从原理到落地,自动生成字体枚举
swift
东坡肘子2 天前
从开放平台到受控生态:谷歌宣布 Android 开发者验证政策 | 肘子的 Swift 周报 #0101
android·swiftui·swift
HarderCoder2 天前
用 `defer` 管理异步清理:Swift 中的“保险丝”模式
swift
大熊猫侯佩2 天前
冰火岛 Tech 传:Apple Foundation Models 心法解密(上集)
llm·ai编程·swift
HarderCoder2 天前
深入理解 SwiftUI 的 Structural Identity:为什么“换个条件分支”就会丢状态?
swiftui·swift
HarderCoder2 天前
Swift Continuations 完全指南:一口气弄懂 4 种“桥梁”
swift
HarderCoder3 天前
Swift 的 `withoutActuallyEscaping`:借一个 `@escaping` 身份,但不真的逃跑
swift