繁体   English   中英

如何在Swift中仅一次在Struct中初始化变量

[英]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
}()

进行了三处更改:

  1. var之前的lazy关键字
  2. =类型和块之间的符号
  3. ()括号的结尾

通常,您可以在文档中添加更多内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM