首页 > 解决方案 > 从 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
    }
  ]

标签: swiftobjectyelpyelp-fusion-api

解决方案


推荐阅读