Swift UI : Json Veri Çekme, Parse Etme ve List İçerisinde Gösterme Nasıl Yapılır?

Apple tarafından 15 Ekim tarihinde yayınlanan istatistiklere göre iOS 13 kullanımı tüm Apple cihazların %50’sinden fazlasında kullanılmaya başlandı bile.

Dolayısıyla geçtiğimiz aylarda yüzünü gösteren SwiftUI için çalışmalarımızı hızlandırma zamanı. Boş kaldıkça ufak tefek denemeler, kurcalamalar yaptığım SwiftUI ile ilgili örnekleri de elimden geldiğince burada paylaşmaya çalışacağım.

Şimdi gelelim SwiftUI ile uzak siteden json veri çekme ve parse etme olayına.

Swiftui Fetch Remote Json And Parse

Öncelikle data modelimiz için struct oluşturalım.

import Foundation
struct Movie: Decodable, Identifiable {

public var id: Int
public var name: String
public var released: String

enum CodingKeys: String, CodingKey {
case id = "id"
case name = "title"
case released = "year"
}
}

Sonrasında JSON verimizi çekelim ve modelimize göre parse edelim.

import Foundation
public class MovieFetcher: ObservableObject {

@Published var movies = [Movie]()

init(){
// load()
}

func load() {
let url = URL(string: "https://gist.githubusercontent.com/rbreve/60eb5f6fe49d5f019d0c39d71cb8388d/raw/f6bc27e3e637257e2f75c278520709dd20b1e089/movies.json")!

URLSession.shared.dataTask(with: url) {(data,response,error) in
do {
if let d = data {
let decodedLists = try JSONDecoder().decode([Movie].self, from: d)
DispatchQueue.main.async {
self.movies = decodedLists
}
}else {
print("No Data")
}
} catch {
print ("Error")
}

}.resume()

}
}

Ve son aşama, verilerimizi listeleyelim.

import SwiftUI

struct ContentView: View {

@ObservedObject var fetcher = MovieFetcher()

var body: some View {
VStack {

Button(action: {
self.fetcher.movies = []
self.fetcher.load()
}) {
Text("Getir")
}.padding()

List(fetcher.movies) { movie in
VStack (alignment: .leading) {
Text(movie.name)
Text(movie.released)
.font(.system(size: 11))
.foregroundColor(Color.gray)
}
}

}
}
}

Bu içerik https://medium.com/@rbreve kullanıcısından alınarak çalıştığı test edilmiş ve Türkçe olarak yayınlanmıştır.

Yorum yapın