有任何想法让闭包仅运行一次。
每次我打电话给APIResult
。 priceSortedItems
属性将显示“ 123”。我想让它运行一次以减少内存使用量。谢谢。
struct APIResult {
var aryItem = [Item]()
var priceSortedItems: [Item] {
print("123")
let sortedItems = self.aryItem.sorted(by: { (item1, item2) -> Bool in
Double(item1.Value)! > Double(item2.Value)!
})
return sortedItems
}
}
答案 0 :(得分:2)
您的财产用 getter 算作财产。这意味着每次需要获取变量时,getter中的代码都会执行,并且会从 getter 中获取新值。
如果您只想初始化一次变量,请使用lazy
变量,该变量在需要时被初始化一次:
lazy var priceSortedItems: [Item] = {
print("123")
let sortedItems = self.aryItem.sorted(by: { (item1, item2) -> Bool in
Double(item1.Value)! > Double(item2.Value)!
})
return sortedItems
}()
答案 1 :(得分:1)
如果priceSortedItems
更改后要更新aryItem
。您应该这样做。
struct APIResult {
var aryItem = [Item]() {
didSet {
priceSortedItems = aryItem.sorted(by: { (item1, item2) -> Bool in
Double(item1.Value)! > Double(item2.Value)!
})
}
}
var priceSortedItems = [Item]()
}
答案 2 :(得分:0)
func priceSortedItems() ->[Item] {
print("123")
let sortedItems = self.aryItem.sorted(by: { (item1, item2) -> Bool in
Double(item1.Value)! > Double(item2.Value)!
})
return sortedItems
}
您可以将其创建为函数。