изменение значения свойства в модели в swift - PullRequest
0 голосов
/ 24 апреля 2020

Я новичок в Swift и у меня проблемы с тем, как взаимодействуют классы моделей и представления. Я пытаюсь реализовать переключатель в представлении, которое изменяет значение свойства в классе модели, но в структуре я не нахожу способ его реализации:

import SwiftUI

struct DomandaRispostaView: View {

    @ObservedObject var dm: DataManager = DataManager.shared
    @ObservedObject var domandaRisposta : DomandaRisposta

    @State private var isEnabled1 = false

    var body: some View {
        VStack {
            Text(domandaRisposta.testoRisposta)
            Form {

                    Toggle(isOn: $isEnabled1) {
                        Text(isEnabled1 ? "Checked" : "Unchecked")
                        domandaRisposta.valoreRisposta == true
                    }

            }
        }
    }
}

проблема заключается в этой строке :

domandaRisposta.valoreRisposta == true

Заранее спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Вам не нужно использовать отдельную переменную @State для поддержания состояния выбора. Я отредактировал свой код для добавления соответствия Codable в класс по мере необходимости.

class DomandaRisposta: ObservableObject, Codable {
    @Published var valoreRisposta: Bool = false

    enum CodingKeys: CodingKey {
        case valoreRisposta
    }

    init(valoreRisposta: Bool) {
        self.valoreRisposta = valoreRisposta
    }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        valoreRisposta = try container.decode(Bool.self, forKey: .valoreRisposta)
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(valoreRisposta, forKey: .valoreRisposta)
    }
}


struct DomandaRispostaView: View {
    @ObservedObject var domandaRisposta: DomandaRisposta

    var body: some View {
        Toggle(isOn: $domandaRisposta.valoreRisposta) {
           Text(domandaRisposta.valoreRisposta ? "Checked" : "Unchecked")
        }
    }
}

На всякий случай, если вы этого еще не сделали, создайте представление с помощью

let rootView = DomandaRispostaView(domandaRisposta: model)
0 голосов
/ 24 апреля 2020

любая причина, по которой это не будет работать:

 Toggle(isOn: self.$domandaRisposta.valoreRisposta) {
    Text(self.domandaRisposta.valoreRisposta ? "Checked" : "Unchecked")
 }
...