我使用Yelp的API在地图上获取注释。我有一个填充搜索查询的表格视图,我使用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()
" Dining"我想要高级餐厅的注释,但是Yelp的类别并没有提供足够好的描述。为了解决这个问题,我只搜索了餐馆,但增加了价格限制。
添加其他注释时会出现问题。对于"快餐"和" Desserts",我不希望有价格约束,所以我传递nil(搜索时priceTiers参数可以为nil)。为了使其工作,我必须使价格成为可选,并强制将其解包在搜索参数中,从而导致错误。如果我不能使它成为一个可选项,我就无法通过。
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()
}
})
}
有什么方法可以强制解开可选项并期望它为零吗?还是有比我正在做的更好的解决方案?
答案 0 :(得分:2)
"强迫展开的重点"是要声称'相信我',我知道这实际上可能是零#34;如果你错了,你的应用程序会崩溃。
所以你有问题。如果Yelp API需要非零,非空的价格数组,但您的价格为nil
,则需要将nil
price参数转换为可以传递给API调用的默认值
我对Yelp API一无所知,但它似乎很奇怪,它需要一个非零,非空的价格数组。
如果它允许空数组,则更改:
, priceTiers: [price!],
为:
, priceTiers: price != nil ? [price!] : [],
如果它允许可选数组,则将其更改为:
, priceTiers: price != nil ? [price!] : nil,
如果它实际上需要非零非空数组,则提供默认值:
, priceTiers: [price ?? CDYelpPriceTier(someDefault)],
调整最后一个以正确创建一些默认价格层。