JSON dengan SwiftUI menggunakan Array
Sep 17 2020
Saya baru mengenal SwiftUI dan hanya menggunakan UIKit sebelumnya. Saya mencoba menggunakan JSON untuk menampilkan judul tetapi semua video tutorial bekerja dengan daftar. Saya tidak ingin menggunakan daftar apa pun dengan JSON yang menampilkan semua data. Hanya ingin mengambil contoh kedua atau array tertentu untuk judul.
Bagaimana cara menghapus daftar di SwiftUI? Pandangan ku:
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
var body: some View {
NavigationView {
List(networkManager.posts) { post in
HStack {
Text(String(post.points))
Text(post.title)
}}
.navigationBarTitle("H4X0R NEWS")
}
.onAppear {
self.networkManager.fetchData()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Pengelola jaringan:
class NetworkManager: ObservableObject {
@Published var posts = [Post]()
func fetchData() {
if let url = URL(string: "https://hn.algolia.com/api/v1/search?tags=front_page") {
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.hits
}
} catch {
print(error)
}
}
}
}
task.resume()
}
}
}
Dan file struct saya untuk Json:
struct Results: Decodable {
let hits: [Post]
}
struct Post: Decodable, Identifiable {
var id: String {
return objectID
}
let objectID: String
let points: Int
let title: String
}
Jawaban
1 pawello2222 Sep 17 2020 at 23:38
Saya tidak ingin menggunakan daftar apa pun dengan JSON yang menampilkan semua data. Hanya ingin mengambil contoh kedua atau array tertentu untuk judul.
Anda dapat menggunakan properti yang dihitung untuk mengakses elemen tertentu (dan judulnya) dari postslarik:
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
// return the title of the second item in the `posts` array
var title: String {
guard networkManager.posts.count >= 2 else {
// decide what to do when data is not yet loaded or count is <= 1
return "Loading..."
}
return networkManager.posts[1].title
}
var body: some View {
NavigationView {
Text(title)
.navigationBarTitle("H4X0R NEWS")
}
.onAppear {
self.networkManager.fetchData()
}
}
}
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'