这是我的结构:
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将始终保持不变。
有没有可能的方法来计算这个定价只是一次,所以我可以获得更好的表现?
我是否正确地执行此操作,或者在设置pricingCharts时是否应遵循其他模式。
答案 0 :(得分:0)
你拥有的是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
之前var
关键字
=
在类型和块之间签名()
大括号结尾处的大括号通常你可以更多地in the docs.