[英]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.