Функция SwiftUI toggle () для опубликованных значений перестала запускать didSet в Swift 5.2

Я только что обновил свой Xcode до 11.4 с 11.3, и мой проект, написанный на SwiftUI, начал вести себя по-другому. Раньше я вызывал функцию toggle() для логических значений, и она использовалась для запуска обозревателя свойств didSet, однако она больше не работает.

Допустим, у нас есть свойство State с именем isSettingOn. Я называл это:

isSettingOn.toggle()

который запускал didSet наблюдателя за недвижимостью. Теперь, только если я назову это:

isSettingOn = true

это работает.

Все мои проекты основаны на этом поведении, и теперь это изменение практически все сломало. Кто-нибудь знает, действительно ли я здесь что-то не так делаю?

Изменить:

Добавлен демонстрационный код:

struct ContentView: View {

    @State var isSettingOn: Bool = true {
        didSet {
            print("didSet isSettingOn")
        }
    }

    var body: some View {
        Button(action: {
            self.isSettingOn = true // will trigger didSet
            self.isSettingOn.toggle() // won't trigger didSet
        }) {
            Text("Toggle isSettingOn")
        }
    }
}

person Cuneyt    schedule 28.03.2020    source источник
comment
Здесь отлично работает. Не могли бы вы предоставить демонстрационный код?   -  person Asperi    schedule 29.03.2020
comment
Спасибо @Asperi, я обновил свой вопрос образцом кода. Кроме того, я понял, что первая проблема (представление не обновляется) была связана со второй проблемой, о которой я упоминал (didSet не запускается), поэтому я также обновил содержание вопроса.   -  person Cuneyt    schedule 29.03.2020
comment
попробуйте, это работает! stackoverflow.com/a/59391476/8457280   -  person Chris    schedule 30.03.2020
comment
Похоже, ошибка будет исправлена ​​в следующем выпуске Swift. См. github.com/apple/swift/pull/29931.   -  person Monica Granbois    schedule 17.04.2020
comment
Спасибо, ребята, за ваши комментарии, я опубликовал ответ, что это исправлено в Xcode 11.5.   -  person Cuneyt    schedule 19.05.2020


Ответы (1)


Это была ошибка в Xcode 11.4 and 11.4.1, и она была исправлена ​​в Xcode 11.5 (Beta) с помощью Swift 5.2.4.

person Cuneyt    schedule 18.05.2020