繁体   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