Как я могу извлечь каждый текст данных из таблицы результатов из JSON? : SwiftUI - PullRequest
0 голосов
/ 23 апреля 2020

Прежде всего я создал этот класс NetworkManager для создания сетей с json API. как это показано ниже.

import Foundation
import SwiftUI
import Combine

class NetworkManager: ObservableObject {

    @Published var posts = [Post]()


    func fetchData() {
        var urlComponents = URLComponents()
        urlComponents.scheme = "http"
        urlComponents.host = "183.111.148.229"
        urlComponents.path = "/mob_json/mob_json.aspx"
        urlComponents.queryItems = [
            URLQueryItem(name: "nm_sp", value: "UP_MOB_CHECK_LOGIN"),
            URLQueryItem(name: "param", value: "1000|1000|1")
        ]

        if let url = urlComponents.url {
            print(url)
            let session = URLSession(configuration: .default)
            let task = session.dataTask(with: url) { (data, response, error) in
                if error == nil {
                    let decoder = JSONDecoder()
                    if let safeData = data {
                        do {
                            let results = try decoder.decode(Results.self, from: safeData)

                            DispatchQueue.main.async {
                                self.posts = results.Table
                            }   
                        } catch {
                            print(error)
                        }
                    }
                }
            }
            task.resume()

        }

    }
}

И это моя Модель данных, которая является структурой для моих json данных. Я также сделал это с помощью ссылочного кода на inte rnet.

import Foundation

struct Results: Decodable {
    let Table: [Post]
}

struct Post: Decodable, Identifiable {
    var id: String {
        return CD_FIRM
    }
    let CD_FIRM: String
    let NM_FIRM: String
    let CD_USER: String
    let NM_USER: String
}

На виде, это нормально работает, я вижу свой результат. Но это не то, что я хочу. Я хочу видеть каждое отдельное текстовое значение.

import SwiftUI

struct SwiftUIView: View {

    @ObservedObject var networkManager = NetworkManager()

    var body: some View {
        NavigationView {
            List(networkManager.posts) { post in
                Text(post.NM_FIRM)
            }
        }.onAppear {
            self.networkManager.fetchData()
        }
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}

** Я хочу извлечь одно текстовое значение из результатов, подобных этому **, только с одним текстом. Я могу извлечь все данные из json, но я не знаю, как извлечь каждое значение из результата. Я попробовал вот так

import SwiftUI

struct SwiftUIView: View {

    @ObservedObject var networkManager = NetworkManager()

    var body: some View {
        VStack {

             Text(networkManager.posts.NM_FIRM)

        }.onAppear {
            self.networkManager.fetchData()
        }
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}

Но этот не сработал. где я должен это исправить? Пожалуйста, помогите мне.

Добавить еще вещь

import Foundation

struct Results: Decodable {
    let Table: [Post]
}

struct Post: Decodable, Identifiable {
    var id: String {
        return name
    }
    let name: String
    let cellPhone: String
}

// I want to get value like this but this didn't work
var data1 = name
var data2 = cellPhone
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...