[英]Struct property closure just run once in Swift
有什么想法让闭包只运行一次。
每次我调用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
}
}
您的财产被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
}()
如果要在aryItem
更改后更新priceSortedItems
。 你应该这样
struct APIResult {
var aryItem = [Item]() {
didSet {
priceSortedItems = aryItem.sorted(by: { (item1, item2) -> Bool in
Double(item1.Value)! > Double(item2.Value)!
})
}
}
var priceSortedItems = [Item]()
}
func priceSortedItems() ->[Item] {
print("123")
let sortedItems = self.aryItem.sorted(by: { (item1, item2) -> Bool in
Double(item1.Value)! > Double(item2.Value)!
})
return sortedItems
}
您可以将其创建为函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.