咨询:SwiftUI视图中非状态变量用var而非let的原因
为什么SwiftUI View里用
var而非let定义不可修改的外部属性? 针对你提到的WWDC2021《Demistify SwiftUI》里的示例,这里用var而非let主要有几个实际原因:
预留默认值与初始化调整空间:如果后续需要给
intensity添加默认值,比如改成var intensity: Double = 0.5,用var可以直接修改,不用调整初始化逻辑;而let要么一开始就指定默认值,要么必须在初始化器里明确赋值,灵活性差很多。支持后续扩展的可变需求:虽然当前View的
body里不会修改这个属性,但如果之后给PurrDecibelView写扩展,需要添加修改该属性的mutating方法时,var的定义不需要改动;要是用let,就必须回退修改原属性定义,破坏了代码的稳定性。匹配SwiftUI的编码语义:外部传入的View属性本质是用来配置View的,用
var能明确传递“这个属性是可外部调整的”语义——虽然View是值类型,外部更新属性本质是创建新实例,但var的写法更符合开发者对“可配置属性”的认知;而let会被理解成“这个值从创建起就固定不变”,语义上不太匹配外部传入属性的定位。降低初始化的限制门槛:用
let的话,初始化时必须确保属性被明确赋值,不能有模糊的情况;var则可以借助Swift自动合成的初始化器,后续如果要把属性改成可选类型(比如var intensity: Double?),调整起来也更顺畅,不用重构初始化逻辑。
内容的提问来源于stack exchange,提问作者Jack Goossen
相关产品推荐
相关产品推荐

