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

时间:2017-07-08 20:29:24

标签: swift struct static

这是我的结构:

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时是否应遵循其他模式。

1 个答案:

答案 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 之前
  1. var关键字
  2. =在类型和块之间签名
  3. ()大括号结尾处的大括号
  4. 通常你可以更多地in the docs.