我通过其使用懒惰变种,其中NSPredicate是一个核心数据锻炼工作“懒惰地实例化”,如下所示:
lazy var moderateVenuePredicate: NSPredicate = {
return NSPredicate(format: "%K == %@", #keyPath(Venue.priceInfo.priceCategory), "$$")}()
注意最后的括号强制变量的实例化(或“评估”)。
现在输入后我不清楚为什么这需要“懒惰地实例化”。为什么,我想知道,如果我只是简单地编写以下行,而基本相同但没有强制实例化,那么程序是否会运行?:
lazy var moderateVenuePredicate: NSPredicate = NSPredicate(format: "%K == %@", #keyPath(Venue.priceInfo.priceCategory), "$$")
我期待程序崩溃并向我揭示我做错了什么,但令我惊讶的是,该程序即使有了这个改变(!?)。所以现在我的问题是这里发生了什么?是否真的需要教科书推荐的这个变量的实例化?如果程序在没有它的情况下正常工作,那么延迟实例化的需求是什么?