swift - Enlace personalizado de estado dentro de ForEach

CorePress2024-01-24  9

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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare