swift - 从 Yelp 获取类别
问题描述
如何从 Yelp Fusion Api 获取类别标题?我想将此数据包含在我的餐厅应用程序中。文档说明它是一个字符串,类别是一个对象。但是 NSObject 和 string 都在使应用程序崩溃。我想不通。请帮忙!
这是我的代码:
import Foundation
import Moya
private let apiKey = "Some_Key"
enum YelpService {
enum BuisnessesProvider: TargetType {
var baseURL: URL {
return URL(string: "https://api.yelp.com/v3/businesses")!
}
var path: String {
switch self {
case .search:
return "/search"
}
}
var method: Moya.Method {
return .get
}
var sampleData: Data {
return Data()
}
var task: Task {
switch self {
case let .search(loc):
return .requestParameters(parameters: ["location": loc, "term": "restaurants", "limit": 1], encoding: URLEncoding.queryString)
}
}
var headers: [String : String]? {
return ["Authorization": "Bearer \(apiKey)"]
}
case search(loc: String)
}
}
struct Root: Codable {
let businesses: [Business]
}
struct Business: Codable {
let id: String
let name: String
let imageUrl: URL
let rating: Double
let url: String
let category: String
}
struct RestaurantListViewModel {
let name: String
let imageUrl: URL
let id: String
let rating: Double
let url: String
let category: String
}
extension RestaurantListViewModel {
init(business: Business) {
self.name = business.name
self.id = business.id
self.imageUrl = business.imageUrl
self.rating = business.rating
self.url = business.url
self.category = business.category
}
}
yelp api 响应是:
{
"id": "WavvLdfdP6g8aZTtbBQHTw",
"alias": "gary-danko-san-francisco",
"name": "Gary Danko",
"image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/CPc91bGzKBe95aM5edjhhQ/o.jpg",
"is_claimed": true,
"is_closed": false,
"url": "https://www.yelp.com/biz/gary-danko-san-francisco?adjust_creative=wpr6gw4FnptTrk1CeT8POg&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_lookup&utm_source=wpr6gw4FnptTrk1CeT8POg",
"phone": "+14157492060",
"display_phone": "(415) 749-2060",
"review_count": 5296,
"categories": [
{
"alias": "newamerican",
"title": "American (New)"
},
{
"alias": "french",
"title": "French"
},
{
"alias": "wine_bars",
"title": "Wine Bars"
}
],
"rating": 4.5,
"location": {
"address1": "800 N Point St",
"address2": "",
"address3": "",
"city": "San Francisco",
"zip_code": "94109",
"country": "US",
"state": "CA",
"display_address": [
"800 N Point St",
"San Francisco, CA 94109"
],
"cross_streets": ""
},
"coordinates": {
"latitude": 37.80587,
"longitude": -122.42058
},
"photos": [
"https://s3-media2.fl.yelpcdn.com/bphoto/CPc91bGzKBe95aM5edjhhQ/o.jpg",
"https://s3-media4.fl.yelpcdn.com/bphoto/FmXn6cYO1Mm03UNO5cbOqw/o.jpg",
"https://s3-media4.fl.yelpcdn.com/bphoto/HZVDyYaghwPl2kVbvHuHjA/o.jpg"
],
"price": "$$$$",
"hours": [
{
"open": [
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 0
},
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 1
},
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 2
},
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 3
},
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 4
},
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 5
},
{
"is_overnight": false,
"start": "1730",
"end": "2200",
"day": 6
}
],
"hours_type": "REGULAR",
"is_open_now": false
}
],
"transactions": [],
"special_hours": [
{
"date": "2019-02-07",
"is_closed": null,
"start": "1600",
"end": "2000",
"is_overnight": false
}
]