Guard не позволяет развернуть словарь - PullRequest
0 голосов
/ 26 мая 2020

Я пытался извлечь данные из словаря. Должно быть 5 значений. Первый фрагмент кода не работает, заполняя только scheduleForCurrentDay 1 значением, тогда как второй фрагмент работает, получая все 5. Может ли кто-нибудь объяснить, почему первый не работает? Я предполагаю, что это как-то связано с копированием словаря, но я не совсем уверен.

    // Fails; only gets one value
    private var categories = [StudyCategory]() {
        didSet {
            let c = categories
            for subject in c {
                guard let target = subject.quota[currentDayComponent] else { continue }
                scheduleForCurrentDay[subject.title] = target
            }
        }
    }

    // Succeeds; gets all 5 values
    private var categories = [StudyCategory]() {
        didSet {
            let c = categories
            var schedule = [String:Double]()
            for subject in c {
                schedule[subject.title] = subject.quota[currentDayComponent]
            }
            scheduleForCurrentDay = schedule
        }
    }
...