这是我的结构:
struct BookingDetailViewModel {
private let bookingDetail:BookingDetail
init(bookingDetail:BookingDetail) {
self.bookingDetail = bookingDetail
}
var pricingCharts:[PricingChartViewModel] {
let chartArray = bookingDetail.priceCharts
var pricingChartArray:[PricingChartViewModel] = Array()
for chart in chartArray {
let pricingChartViewModel = PricingChartViewModel(pricingChart: chart)
pricingChartArray.append(pricingChartViewModel)
}
return pricingChartArray
}
}
这是我的 viewModel,当我尝试访问 bookingDetailViewModel.pricingCharts 的值时,从 tableView 数据源访问时会一次又一次地计算内部数组,这对我来说没有任何意义,因为定价图表将始终保持不变。
是否有任何可能的方法只计算一次该定价图表,以便我可以获得更好的性能?
我在设置定价图表时做得正确还是应该遵循其他模式。
最佳答案
您所拥有的是 pricingCharts
的自定义 getter,它的行为应有 - 它会在每次需要时重新计算(即获取)其值。
您需要/想要的是一个lazy var
。只需将您的 pricingCharts
更改为:
lazy var pricingCharts:[PricingChartViewModel] = {
let chartArray = self.bookingDetail.priceCharts
var pricingChartArray:[PricingChartViewModel] = Array()
for chart in chartArray {
let pricingChartViewModel = PricingChartViewModel(pricingChart: chart)
pricingChartArray.append(pricingChartViewModel)
}
return pricingChartArray
}()
进行了三项更改:
lazy
关键字=
类型和 block 之间的符号()
block 末尾的大括号
var
之前的 通常你可以红色更多in the docs.
关于swift - 如何在 Swift 中初始化 Struct 中的变量一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990467/