在 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 })
我考虑过空合并,如果允许的话,到目前为止似乎没有什么好主意,有什么想法吗?
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 })