问题描述
我正在尝试从Yelp解码有关业务详细信息的JSON响应。 JSON响应会像这样返回:
{
"id": "ATaQ4GLQisXA7tylsJobhQ","alias": "chicken-fire-orlando","name": "Chicken Fire","image_url": "https://s3-media4.fl.yelpcdn.com/bphoto/YMkiKEv-WApzbJZ321rsEg/o.jpg","is_claimed": true,"is_closed": false,"url": "https://www.yelp.com/biz/chicken-fire-orlando?adjust_creative=s-hyKAjsx6P4UW-uqMn7aQ&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_lookup&utm_source=s-hyKAjsx6P4UW-uqMn7aQ","phone": "","display_phone": "","review_count": 107,"categories": [
{
"alias": "chickenshop","title": "Chicken Shop"
}
],"rating": 5.0,"location": {
"address1": "2406 E Washington St","address2": "","address3": null,"city": "Orlando","zip_code": "32803","country": "US","state": "FL","display_address": [
"2406 E Washington St","Orlando,FL 32803"
],"cross_streets": ""
},"coordinates": {
"latitude": 28.5438637820401,"longitude": -81.3516076281667
},"photos": [
"https://s3-media4.fl.yelpcdn.com/bphoto/YMkiKEv-WApzbJZ321rsEg/o.jpg","https://s3-media3.fl.yelpcdn.com/bphoto/gLcMNuoaJonieGFsSS9qeA/o.jpg","https://s3-media4.fl.yelpcdn.com/bphoto/oWAPiL4nQLab-PrrEoQ30A/o.jpg"
],"hours": [
{
"open": [
{
"is_overnight": false,"start": "1200","end": "1500","day": 3
},{
"is_overnight": false,"start": "1700","end": "2000","day": 4
},"day": 5
},"day": 6
},"day": 6
}
],"hours_type": "REGULAR","is_open_Now": true
}
],"transactions": [
"delivery","pickup"
]
}
为简单起见,我只想简单介绍3件事。
struct BusinessDetails: Codable,Identifiable {
let id: String
let name: String
let image_url: String
}
public class Api: ObservableObject {
func getDetails(completion: @escaping (BusinessDetails) -> ()) {
let apikey = "API KEY HERE"
let url = URL(string: "https://api.yelp.com/v3/businesses/ATaQ4GLQisXA7tylsJobhQ")!
var request = URLRequest(url: url)
request.setValue("Bearer \(apikey)",forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
URLSession.shared.dataTask(with: request) {(data,_,_) in
let details = try! JSONDecoder().decode(BusinessDetails.self,from: data!)
dispatchQueue.main.async {
completion(details)
print("Below are details")
print(details)
}
}.resume()
}
}
我发现我能够获取要在视图中显示的信息,但是当我错误地调用函数时,我显然具有语法。
我正在使用:
import SwiftUI
import SDWebImageSwiftUI
struct Details: View {
@State var details: [BusinessDetails] = []
var body: some View {
ScrollView (/*@START_MENU_TOKEN@*/.vertical/*@END_MENU_TOKEN@*/,showsIndicators: false) {
ForEach(details) { detail in
vstack {
WebImage(url: URL(string: detail.image_url))
.onSuccess { image,data,cacheType in
}
.resizable()
.placeholder(Image(systemName: "photo"))
.placeholder {
Rectangle().foregroundColor(.gray)
}
.indicator(.activity)
.transition(.fade(duration: 0.5))
.scaledToFill()
.frame(minWidth: 0,maxWidth: .infinity,minHeight: 100,maxHeight: 250)
.clipped()
}.padding(.vertical,8)
}.onAppear {
Api().getDetails { (details) in
self.details = details
}
}
}
}
}
"BusinessDetails(id: "ATaQ4GLQisXA7tylsJobhQ",name: "Chicken Fire",image_url: "https://s3-media4.fl.yelpcdn.com/bphoto/YMkiKEv-WApzbJZ321rsEg/o.jpg")"
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)