在 Swift 中有没有更优雅的方式来编写这种延迟加载模式?

Is there a more elegant way to write this lazy loading pattern in Swift?

我考虑过空合并,如果允许的话,到目前为止似乎没有什么好主意,有什么想法吗?

var habitResults: [[String:String]]? = resultsFilteredByHabit[habitId]

if habitResults != nil {
    // No action required
}
else {
    habitResults = results.filter({ [=11=]["habitId"] == habitId })
    resultsFilteredByHabit[habitId] = habitResults
}

Swift 中常用的延迟加载模式语法是

lazy var habitResults : [[String:String]] = {
    return results.filter{ [=10=]["habitId"] == habitId }
}()

第一次访问变量时执行一次闭包

我觉得这样看起来更优雅一点:

resultsFilteredByHabit[habitId] = resultsFilteredByHabit[habitId] ?? results.filter({ [=10=]["habitId"] == habitId })