SWIFT UI将元素添加到数组中

问题描述 投票:0回答:1

我试图学习新的SwiftUI编码技术。我想单击一个按钮,该按钮会将元素添加到@State变量的数组中。该按钮是buttonclick功能。该数组是push_group_row / push_group_array。我在append语句中收到错误。

最终,buttonclick将访问数据库以构建具有更多行的数组,但是现在我仅尝试添加一行。

代码:enter image description here

import SwiftUI
import Combine

var gordon: String = "xxxxxx"

struct Result: Codable {
  let trackId: Int
  let trackName: String
  let collectionName: String
}
struct Response: Codable {
  var results: [Result]
}
struct Pokemon: Identifiable {
  let id: Int
  let name: String
  let type: String
  let color: Color
}
struct push_group_row {
  let id: Int
  let code: String
  let title: String
}

struct ContentView: View
    {
    @State private var results = [Result]()
    @State var pokemonList = [
       Pokemon(id: 0, name: "Charmander", type: "Fire", color: .red),
       Pokemon(id: 1, name: "Squirtle", type: "Water", color: .blue),
       Pokemon(id: 2, name: "Bulbasaur", type: "Grass", color: .green),
       Pokemon(id: 3, name: "Pikachu", type: "Electric", color: .yellow),]
    @State var push_group_array = [push_group_row(id: 0, code: "code12", title: "POAFire")]

    var body: some View
    {
    NavigationView
    {
        VStack(alignment: . leading){
        Button(action: {
            // What to perform
            self.buttonclick()
        }) {
            // How the button looks like
            Text("clickme")
            .background(Color.purple)
            .foregroundColor(.white)
        }

        List(results, id: \.trackId)
        {item in
            NavigationLink(destination: DetailView(lm: String(item.trackId)))
            {
            VStack(alignment: .leading)
            {
                Text(String(item.trackId))
                Text(item.trackName)
                    .font(.headline)
                Text(item.collectionName)
                Text(gordon)
            }
            }
            }

            List(self.pokemonList)
            { pokemon in
                HStack
                    {
                    Text(pokemon.name)
                    Text(pokemon.type).foregroundColor(pokemon.color)
                    }

            }

            List(push_group_array, id: \.id)
                 { pg_item in
                     HStack
                         {
                         Text(String(pg_item.id))
                         Text(pg_item.code)
                         }

                 }
            .onAppear(perform: self.loaddata)
            }
            .navigationBarTitle("x")
            .navigationBarItems(
                trailing: Button(action: addPokemon, label: { Text("Add") }))

            Spacer()
    }
}

    func addPokemon() {
        if let randomPokemon = pokemonList.randomElement() {
            pokemonList.append(randomPokemon)
        }
    }

    // *************************** below is the add arrat code
    func buttonclick() {
        let newCode = "First"
        let newTitle = "Second"
        push_group_array.append(id: 1, code: newCode,  title: newTitle)
    }

    func loaddata()
    {
        print("loaddata")

        guard let url = URL(string: "https://itunes.apple.com/search?term=taylor+swift&entity=song")
        else
        {
           print("Invalid URL")
           return
        }

        var urlData: NSData?
        let request = URLRequest(url: url)
        URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data
            {
                if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data)
                {
                DispatchQueue.main.async
                {
                    urlData = data as NSData?
                    self.results = decodedResponse.results
                    print(self.results)
                    print(urlData ?? "urlData_Defaultvalue")
                }
                return
                }
            }
            print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
        }.resume()
    }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}
xcode swiftui
1个回答
1
投票

您需要推送对象而不是3个值

push_group_array.append(push_group_row(id: 1, code: newCode, title: newTitle))
© www.soinside.com 2019 - 2024. All rights reserved.