Я пишу приложение для iOS, в котором я ищу места с определенным categoryId, а не поисковый запрос. Мое приложение не требует от пользователей входа в систему, поэтому я использую стороннюю оболочку API под названием das- quadrat, чтобы избежать хлопот OAuth с пользователями. Я следую примеру поискового запроса внизу страницы.
Кроме того, вот как они реализуют свой функционал в своем демонстрационном проекте (ExploreViewController.swift):
func exploreVenues() {
let location = self.locationManager.location
var parameters = location.parameters()
let task = self.session.venues.explore(parameters) {
(result) -> Void in
if self.venueItems != nil {
return
}
if !NSThread.isMainThread() {
fatalError("!!!")
}
if result.response != nil {
if let groups = result.response!["groups"] as? [[String: AnyObject]] {
var venues = [[String: AnyObject]]()
for group in groups {
if let items = group["items"] as? [[String: AnyObject]] {
venues += items
}
}
self.venueItems = venues
}
self.tableView.reloadData()
} else if result.error != nil && !result.isCancelled() {
self.showErrorAlert(result.error!)
}
}
task.start()
}
В моем собственном коде у меня есть массив некоторых релевантных идентификаторов категорий, и я хочу выполнить задачу поиска для каждого из них. Здесь я пытаюсь найти идентификаторы категорий, а затем сохраняю название места и расстояние от пользователя в словаре (используя SwiftyJSON — я бы дал ссылку, но у меня пока недостаточно репутации), чтобы получить элементы из JSON:
var venues: [JSONParameters]!
var distance: [JSONParameters]!
var session : Session!
let tagData = TagData()
/*
TagData contains a dictionary with relevant categoryIDs and the number
of times the user has visited that venue.
*/
var categoryTagSearch: [String] = TagData.returnRelevantCategories()
var venueNamesDictionary: [String: Int] = [:] //name : distance from user
func findVenues(callback: [String: Int] -> Void) {
for tag in categoryTagSearch {
let searchTask = session.venues.search(tag) {
(result) -> Void in
if let response = result.response { //trying to create keys of names with values of distances
let count: Int? = response["venues"].array?.count
let venueName: [String] = response["venues"]["name"].arrayValue
let distanceValue: [Int] = response["venues"]["location"]["distance"].arrayValue
for (i = 0; i < count; i++) {
venueNamesDictionary[venueName[i]] = distanceValue[i]
}
}
} // end searchtask assignment
callback(searchTask.start()) //to force this to wait for responses to finish filling Dictionary
}// end for
}// end Function
Проблема в том, что поиск по categoryId редко возвращает результаты поиска; это все равно, что ввести «4bf58dd8d48988d1c8941735» в строку поиска Foursquare, которая либо не выдаст места нужной категории, либо вообще ничего. Как убедиться, что мой поиск возвращает только места проведения правильной категории? Есть ли какая-то функция, которую я не замечаю?