Quiero alternar variables en mi variable de Estado de tipo Estructura, pero no puedo entender cómo construir un enlace personalizado para la variable de Estado. Xcode arroja el error "No se puede asignar a la propiedad: 'traducciones' es una constante 'let'"
ForEach con enlace personalizado (eso no funciona)
ForEach(data.translations, id: \.self) { translations in
let binding = Binding(
get: { translations.target},
set: { translations.target = struct Data: Hashable {
var base: String
var target: String
var translations: [Translations]
struct Translations: Hashable {
let language: String
var target: Bool
var texts: [String: Text]
}
struct Text: Hashable {
var translation: String
var pinned: Bool
var order: Int
}
}
}
)
HStack {
Text("\(translations.language)")
Spacer()
Toggle(isOn: binding) {
Text("")
}
.toggleStyle(CheckboxToggleStyle())
}
}
La estructura
@State var data = Data(
base: "",
target: "",
translations: [ // ADD ALL LANGUAGES. CHECK REMINDERS-APP FOR NOTE ABOUT LANGUAGES
Data.Translations(
language: "Danish",
target: false,
texts: [
"..." : Data.Text(translation: "...", pinned: false, order: 0)
]
),
Data.Translations(
language: "Swedish",
target: true,
texts: [
"..." : Data.Text(translation: "...", pinned: false, order: 0)
]
),
Data.Translations(
language: "English",
target: true,
texts: [
"..." : Data.Text(translation: "...", pinned: false, order: 0)
]
)
]
)
El Estado
struct DataStruct: Hashable {
var base: String
var target: String
var translations: [TranslationsStruct]
}
struct TranslationsStruct: Hashable {
let language: String
var target: Bool
var texts: [String: TextStruct]
}
struct TextStruct: Hashable {
var translation: String
var pinned: Bool
var order: Int
}
------------------------------------
Tuviste varios problemas, como nombrar e intentar cambiar un elemento let de ForEach, aquí la salvación:
var dataStructInitializing = DataStruct(
base: "",
target: "",
translations: [
TranslationsStruct(
language: "Danish",
target: false,
texts: [
"..." : TextStruct(translation: "...", pinned: false, order: 0)
]
),
TranslationsStruct(
language: "Swedish",
target: true,
texts: [
"..." : TextStruct(translation: "...", pinned: false, order: 0)
]
),
TranslationsStruct(
language: "English",
target: true,
texts: [
"..." : TextStruct(translation: "...", pinned: false, order: 0)
]
)
]
)
import SwiftUI
struct ContentView: View {
@State private var dataStruct: DataStruct = dataStructInitializing
var body: some View {
VStack {
ForEach(dataStruct.translations.indices, id: \.self) { index in
let binding = Binding(
get: { dataStruct.translations[index].target },
set: { dataStruct.translations[index].target = 1008611 }
)
Toggle(isOn: binding) { Text(dataStruct.translations[index].language) }
}
}
.padding()
}
}
1008611