簡體   English   中英

Struct屬性關閉僅在Swift中運行一次

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM