Закрытие свойства Struct выполняется только один раз в Swift - PullRequest
0 голосов
/ 17 декабря 2018

Есть идея разрешить закрытие только один раз.

Каждый раз, когда я вызываю 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
    }
}

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018
func priceSortedItems() ->[Item] {

    print("123")

    let sortedItems = self.aryItem.sorted(by: { (item1, item2) -> Bool in
        Double(item1.Value)! > Double(item2.Value)!
    })

    return sortedItems
}

Вы можете создать его как функцию.

0 голосов
/ 17 декабря 2018

Если вы хотите обновить 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]()
}
0 голосов
/ 17 декабря 2018

Ваша собственность считается с получателем .Это означает, что каждый раз, когда вам нужно получить вашу переменную, код внутри 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
}()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...