Как получить значение одной переменной в структуре - PullRequest
0 голосов
/ 21 июня 2020

Я использую Post2 как структуру и функцию GetTodaysProfit () для извлечения JSON данных из Интернета.

struct Post2: Codable,Identifiable {
let id = UUID()
var totalasset: Double
var totaltodaysprofit: Double
var todaysprofitpercent: Double
var totalmarketvalue: Double
var maxpurchasepower: Double
}

func GetTodaysProfit(completion: @escaping (Double) -> Void) {
    var ttlTodaysProfit: Double = 0.00
    let url = URL(string: getTotalsString)
    URLSession.shared.dataTask(with: url!) { (data, _, _) in
    let postArray = try! JSONDecoder().decode([Post2].self, from: data!)
    if let post = postArray.first {
       ttlTodaysProfit = post.totaltodaysprofit
    }
    completion(ttlTodaysProfit)
    }
.resume()

}

Исходные данные JSON содержат только одну строку из этих 5 двойных значений, я нужно получить каждый из них и поместить в отдельные текстовые представления в ContentView. Как я могу сослаться на конкретный c элемент в структуре? Или я сделал что-то не так с этим кодом?

Код детали в ContentView:

 var pro = GetTodaysProfit { profit in
    return profit
}

Text(String(pro))

1 Ответ

0 голосов
/ 21 июня 2020

ваша функция является асинхронной, что означает, что "return ttlTodaysProfit" не вернет ожидаемый результат. Поскольку вы говорите, что в декодируемом массиве есть только одна строка, я предлагаю вам попробовать следующий подход, чтобы вернуть желаемый результат.

Изменить:

import SwiftUI

struct Post2: Codable,Identifiable {
let id = UUID()
var totalasset: Double = 0.0
var totaltodaysprofit: Double = 0.0
var todaysprofitpercent: Double = 0.0
var totalmarketvalue: Double = 0.0
var maxpurchasepower: Double = 0.0
}

struct ContentView: View {
@State var post = Post2()

var body: some View {
    VStack {
        Text("\(self.post.totaltodaysprofit)")
        Text("\(self.post.totalasset)")
    }.onAppear(perform: loadData)
}

func loadData() {
    getTodaysPost() { todayPost in
        if let thePost = todayPost {
            self.post = thePost
        }
    }
}

func getTodaysPost(completion: @escaping (Post2?) -> Void) {
    let url = URL(string: "https://example.com")  // <-- to be supplied
    URLSession.shared.dataTask(with: url!) { (data, _, _) in
        let postArray = try! JSONDecoder().decode([Post2].self, from: data!)
        if let post = postArray.first {
            return completion(post)
        }
        completion(nil)
    }
    .resume()
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...