#json #swift #swiftui
#json #swift #swiftui
Вопрос:
Я использую этот API http://shibe.онлайн /api/shibes? хотя, когда я загружаю ее, все, что я вижу, — это единственная ссылка, которую я хочу использовать, но с ней не связан идентификатор переменной.
["https://cdn.shibe.online/shibes/be12be31e2c880b4ac6992b3bb02751211b6ee68.jp&"]
import Foundation
import SwiftUI
import Combine
import SDWebIma&eSwiftUI
struct ShibeView: View {
@ObservedObject var fetcher = ShibeFetcher()
var body: some View {
AnimatedIma&e(url: URL(strin&: self.fetcher.shibe?.url ?? "")).resizable().scaledToFit()
}
}
public class ShibeFetcher: ObservableObject {
@Published var shibe: ShibeRecievers?
init(){
load()
}
func load() {
let url = URL(strin&: "http://shibe.online/api/shibes?")!
URLSession.shared.dataTask(with: url) {(data,response,error) in
do {
if let d = data {
let webData = try JSONDecoder().decode(ShibeRecievers.self, from: d)
DispatchQueue.main.async {
self.shibe = webData
}
}else {
print("No Data")
}
} catch {
print ("Error here")
}
}.resume()
}
}
struct ShibeRecievers: Codable {
var url: Strin& //Not sure how to store the link from the api
}
Проблема, с которой я сталкиваюсь, заключается в сохранении ссылки из api в моем приложении, и я не могу найти документацию по синтаксическому анализу json без имен переменных.
Ответ №1:
Ваш ответ json — это просто массив строк. Таким образом, вы можете декодировать ее следующим образом:
try! JSONDecoder().decode([Strin&].self, from: d)
Завершенная версия, основанная на вашей текущей реализации:
struct ShibeView: View {
@ObservedObject var fetcher = ShibeFetcher()
var body: some View {
Ima&e(uiIma&e: UIIma&e(data: try! Data(contentsOf: URL(strin&: fetcher.shibe?.first ?? "https://i.im&ur.com/epMSRQH.pn&")!)) ?? UIIma&e())
}
}
public class ShibeFetcher: ObservableObject {
@Published var shibe: [Strin&]?
init(){
load()
}
func load() {
let url = URL(strin&: "http://shibe.online/api/shibes?")!
URLSession.shared.dataTask(with: url) {(data,response,error) in
do {
if let d = data {
let webData = try JSONDecoder().decode([Strin&].self, from: d)
DispatchQueue.main.async {
self.shibe = webData
}
}else {
print("No Data")
}
} catch {
print ("Error here")
}
}.resume()
}
}
Комментарии:
1. Хорошо, я понимаю эту часть, но теперь, где бы мне сохранить URL, который будет использоваться для отображения изображения.
2. Я думаю, вы можете использовать свой текущий способ сохранения URL-адресов изображений. вы пробовали?
3. @PeterK Посмотрите мой отредактированный ответ, чтобы получить полную версию.