Swift中访问枚举值返回nil的问题排查求助
问题:访问可选类实例属性返回nil而非预期的Yearly值
我定义了如下类和枚举:
class NewTabContainerModal { var newContainerDate = Date() var newContainerSelectedFilter : NewAllErrorFIlter = .Yearly func resetModal () { newContainerSelectedFilter = .Yearly newContainerDate = Date() } } enum NewAllErrorFIlter : String { case Monthly = "2" case Yearly = "1" case Daily = "3" }
在ViewController中声明了可选类型变量:
var newContainerModal: NewTabContainerModal?
在viewWillAppear方法中尝试打印该变量的属性:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let newContainerModelData = newContainerModal?.newContainerSelectedFilter print(newContainerModelData) }
但打印结果返回nil而非预期的.Yearly值,请问问题出在哪里?
问题原因与解决方案
核心问题
你声明的newContainerModal是可选类型的类实例变量,但从未对它进行初始化——可选类型的默认值就是nil。当你通过可选链newContainerModal?.newContainerSelectedFilter访问属性时,因为可选值本身为nil,整个表达式的结果自然是nil,和类内部属性的默认值无关。
解决方案
需要在使用该变量前完成初始化,常见两种实现方式:
声明时直接初始化
可以将变量改为非可选类型并直接初始化,或者保留可选类型但提前赋值:// 方式1:改为非可选类型,直接创建实例 var newContainerModal = NewTabContainerModal() // 方式2:保留可选类型,提前初始化 var newContainerModal: NewTabContainerModal? = NewTabContainerModal()延迟初始化(在生命周期方法中创建)
如果需要延迟实例化,可以在viewDidLoad等合适的时机创建实例:override func viewDidLoad() { super.viewDidLoad() newContainerModal = NewTabContainerModal() }
完成初始化后,再次访问newContainerModal?.newContainerSelectedFilter就能得到预期的.Yearly值。
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

