思考问题
我在使用Swift判断语句时,思考的一个问题,那就是变量应该放在if语句内声明还说放在外面声明?

每个判断语句使用的变量不同,如果放在语句内/外,哪一种会增加编译成本?
// 变量A
let A: CFString
// if 判断语句
if appStorage.enableThirdPartyLibraries {
// 使用变量A在语句外声明
} else {
// 变量B在if语句内声明
let B: CFString
}
实际上,变量作用域应尽量“最小化”:变量只在它被使用的地方声明,不要提前声明它如果后续用不到。
// if 判断语句
if appStorage.enableThirdPartyLibraries {
// 变量 A 在 if 语句内声明
let A: CFString
} else {
// 变量 B 在 if 语句内声明
let B: CFString
}
使用原则
1、最小作用域(Minimal Scope)
变量只在需要的地方声明,避免在全函数或条件外部提前定义。
好处:更节省内存(尤其是大对象、图像等),降低出错概率,阅读和维护成本更低。
2、分支独立,避免污染
如果变量只在某个 if 或 else 中用到,应该只写在那一分支中。
避免误用或误判(特别是逻辑分支变多时)。
3、延迟初始化(Lazy Init)
对于性能较重或复杂类型(如 CGImageSource、NSImage、Data),推荐延迟到真正需要时再创建。
避免「无用工作」浪费 CPU、内存和 IO。
总结
变量是否放在 if 内还是外,取决于是否在所有分支都需要它。如果只在某个分支中用到,就放在该分支中即可,不要提前定义浪费资源和空间。