gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:19:22 24 4
gpt4 key购买 nike

这是我的结构:

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
}()

进行了三项更改:

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

通常你可以红色更多in the docs.

关于swift - 如何在 Swift 中初始化 Struct 中的变量一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com