有没有写在这斯威夫特延迟加载模式更优雅的方式?

问题描述 投票:1回答:2

我已经考虑了空合并,如果让,似乎没有这个伟大的,到目前为止,任何想法?

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

if habitResults != nil {
    // No action required
}
else {
    habitResults = results.filter({ $0["habitId"] == habitId })
    resultsFilteredByHabit[habitId] = habitResults
}
swift lazy-loading
2个回答
4
投票

在夫特通常的迟缓装载模式的语法是

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

封盖当变量被访问的第一次执行一次


1
投票

我想,这看起来有点更优雅:

resultsFilteredByHabit[habitId] = resultsFilteredByHabit[habitId] ?? results.filter({ $0["habitId"] == habitId })
© www.soinside.com 2019 - 2024. All rights reserved.