Как выбрать элемент кнопкой или жестом касания в моем списке SwiftUI и передать его в другое представление

В моем приложении мне нужны два игрока (только 2 имени / строки), выбранные из массива, построенного в SwiftUI-коде List / ForEach, который используется в другом представлении.

Каким образом можно преобразовать имя в строку для моего текста (элемента)?

Могу ли я выбрать два пункта из списка?

Спасибо за любую помощь. Франц

Мой код (изменен, найден Ale Patron, Учебник с использованием UserDefaults с кодированием и декодированием массива / списка):

      @State private var allTeams: [PlayerItem] = []
@State private var newPlayer = ""
@State private var selectedPlayer = ""

@State private var selection: String?

struct PlayerItem: Identifiable {
    var id = UUID()
    let player: String
}


var body: some View {
    VStack{
    HStack {
        TextField("Add Players/Teams...", text: $newPlayer)
            .textFieldStyle(RoundedBorderTextFieldStyle())
        
        Button(action: {
            self.allTeams.append(PlayerItem(player: self.newPlayer))
            self.newPlayer = ""
           
        }) {
            Image(systemName: "plus")
        }
        .padding(.leading, 5)
    }.padding()
    
    
    
    List{
        ForEach(allTeams) { playerItem in
            Text(playerItem.player)
        }
        .onTapGesture {
            print("How can I select my first und my second player")
        }
        
    }
       Text("Selected Player: \(selectedPlayer)")
        
    }
}

}

1 ответ

Вам следует использовать индексы для того, что вы пытаетесь сделать. Попробуй это:

       ForEach(allTeams.indices) { i in
          Text(allTeams[i].player)
             .onTapGesture {
                print("How can I select my first und my second player")
                print("The selected player is \(allTeams[i].player). The second player is \(allTeams[i + 1].player)"
            }
        }

Не забудьте также проверить, является ли выбранный игрок последним в массиве, и поймать его. В противном случае вы можете столкнуться с ошибкой за пределами допустимого диапазона.

Другие вопросы по тегам