Проблема с передачей переменной из одного представления (доступ к которому осуществляется через NavigationLink) в родительское представление

1
8

Я изучаю Swift и пытаюсь поэкспериментировать. Я пытаюсь получить доступ к переменной и передать ее из подпредставления в NavigationLink. Переменная выбирается/управляется из списка в представлении в NavigationLink, и я хочу, чтобы она была передана обратно в представление основного экрана (ContentView) для использования в codeе там. Я пробовал использовать @Binding и @State, но я продолжаю получать ошибку в нижней части файла ContentView, говорящую "Отсутствует аргумент для параметра 'selection' в вызове". Кто-нибудь может помочь?

code ContentView:

code talamList:

`import SwiftUI
import AVKit

struct ContentView: View {
    @State var tempo = Int(60)
    @State var onOff = false
    @State var searchText = ""
    @Binding var selection: String
  

    var body: some View {
        
        VStack {
            
            if onOff == false {
                
                Text("🟠🟠🟠🟠🟠🟠")
            }
            else {
                Text("🔵🔵🔵🔵🔵🔵")
            }
                
            NavigationView{
                NavigationLink(destination: talamList()){
                    Text(talamList().selection ?? "Talams")
                }
            }
            VStack{
                    Text("⏲")
                    Stepper {
                        Text("Tempo: \(tempo) BPM")
                    }
                    onIncrement: {
                        if tempo < 200{
                            tempo = tempo + 1
                        }
                    }
                    onDecrement: {
                        if tempo > 1{
                            tempo = tempo - 1
                        }
                    }
                }
                    
                    
    
            
            Toggle(isOn: $onOff) {
                Text("Metronome Status: ")
            }
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }

}`



`import SwiftUI

struct talamList: View {
    @State var searchText = ""
    @State var selection: String?

    let talamDict = ["tisra triputa" : 7, "chatusra triputa (adi)" : 8, "khanda triputa" : 9, "misra triputa" : 11, "sankeerna triputa" : 13, "adi (2 kalai)" : 16, "tisra ekam" : 3, "chatusra ekam" : 4, "khanda ekam" : 5, "misra ekam" : 7, "sankeerna ekam" : 9, "tisra jhampa" : 6, "chatusra jhampa" : 7, "khanda jhampa" : 8, "misra jhampa" : 10, "sankeerna jhampa" : 12]
    

        
    var searchResults: [String] {
        let talams = Array(talamDict.keys)
        if searchText.isEmpty {
            return talams
        }
        else {
            return talams.filter{$0.contains(searchText.lowercased())}
        }
    }
    
    
    var body: some View {
        NavigationStack{
            List (searchResults, id: \.self, selection: $selection){ talam in
                Text(talam)
            }
            .listStyle(.plain)
            .searchable(text: $searchText)
            .navigationTitle("Talams")
        }
    }
}

#Preview {
    talamList()
}`
Авксентий
Вопрос задан10 февраля 2024 г.

1 Ответ

2
Ксения
Ответ получен3 сентября 2024 г.

Ваш ответ

Загрузить файл.