Я использую API Yelp для получения аннотаций на карте.У меня есть табличное представление, заполненное поисковыми запросами, и я использую оператор switch, чтобы решить, что делать, когда один из них выбран.
case "Dining":
self.mapView.removeAnnotations(allAnnotations)
getAnnotations(query: "Restaurant", category: .restaurants, price: .twoDollarSigns)
handleHideBlurView()
case "Fast Food":
self.mapView.removeAnnotations(allAnnotations)
getAnnotations(query: "Fast Food", category: .food, price: nil)
handleHideBlurView()
case "Desserts":
self.mapView.removeAnnotations(allAnnotations)
getAnnotations(query: "Ice Cream", category: .food, price: nil)
handleHideBlurView()
Для ячейки "Столовая" я хочу аннотации для ресторанов изысканной кухни, но категории Yelp не предоставляют ничего, что достаточно хорошо описывает это.Чтобы обойти это, я просто искал рестораны, но добавил ценовое ограничение.
Проблемы возникают при добавлении других аннотаций.Для «Фаст-фуд» и «Десерты» я не хочу, чтобы существовало ценовое ограничение, поэтому я передаю ноль (параметр priceTiers может быть нулевым при поиске).Чтобы это работало, мне пришлось сделать цену необязательной и принудительно развернуть ее в параметрах поиска, что привело к ошибке.Если я не сделаю это необязательным, я не могу пропустить ноль.
func getAnnotations(query : String, category : CDYelpBusinessCategoryFilter, price : CDYelpPriceTier?) {
CDYelpFusionKitManager.shared.apiClient.searchBusinesses(byTerm: query, location: nil, latitude: (self.mapView.userLocation.location?.coordinate.latitude)!, longitude: (self.mapView.userLocation.location?.coordinate.longitude)!, radius: 30000, categories: [category], locale: nil, limit: 30, offset: nil, sortBy: .rating, priceTiers: [price!], openNow: nil, openAt: nil, attributes: nil, completion: { (response) in
if let response = response {
let businesses = response.businesses
//print("There are \(businesses?.count) \(query) businesses")
for business in businesses! {
var b : CDYelpBusiness?
b = business
let lat = b?.coordinates?.latitude
let long = b?.coordinates?.longitude
let phoneNumber = (b?.phone)!
let annotation = GetAnnotationPins(coordinate: CLLocationCoordinate2D(latitude: lat!, longitude: long!), subtitle: phoneNumber, title: (b?.name)!)
self.mapView.addAnnotation(annotation)
}
self.mapView.fitAll()
}
})
}
Можно ли как-нибудь принудительно развернуть дополнительный файл и ожидать, что он будет нулевым?Или есть лучшее решение, чем я делаю?