[英]How to initialise a variable in Struct just once in Swift
这是我的结构:
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数据源访问时,一次又一次地计算内部数组,这对我来说没有任何意义,因为priceingCharts将始终保持不变。
有没有可能只计算一次此定价图表的方法,这样我可以获得更好的性能?
我是在正确执行设置定价图表时还是遵循其他模式?
您拥有的是为pricingCharts
定制的getter,并且它的行为符合pricingCharts
-每次需要时都会重新计算(即获取 )其值。
您需要/想要的是一个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
}()
进行了三处更改:
var
之前的lazy
关键字 =
类型和块之间的符号 ()
括号的结尾
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.