2014-12-31 2 views
0

Я знаю, что это, вероятно, простой квест, я хотел бы вернуть значение currentLocGeoPoint и вернуть массив Objects, который имеет тип PFObject.Возвращаемое значение из функции Swift

  1. Попытался сохранить его как глобальную переменную, но он не работает, потому что он асинхронный и не принимает значения. Возвращает пустое.
  2. Пробный до return currentLocGeoPoint и изменен Void in до PFGeoPoint in. Дает ошибку: PFGeoPoint is not convertible to 'Void'

Так что я не уверен, как я могу получить переменную currentLocGeoPoint.

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: { (placemarks, error) -> Void in 
     if (error != nil) { 
      println("Error:" + error.localizedDescription) 
      //return 
     } 
     if placemarks.count > 0 { 
      let pm = placemarks[0] as CLPlacemark 
      self.displayLocationInfo(pm) 
      currentLoc = manager.location 
      currentLocGeoPoint = PFGeoPoint(location:currentLoc) 
      var query = PFQuery(className:"Bar") 
      query.whereKey("BarLocation", nearGeoPoint:currentLocGeoPoint, withinMiles:10) 
      query.limit = 500 
      query.findObjectsInBackgroundWithBlock { 
       (objects: [AnyObject]!, error: NSError!) -> Void in 
       if objects != nil { 
       } else { 
        println("error: \(error)") 
       } 
      } 
     } else { 
      println("error: \(error)") 
     } 
    }) 
} 
+0

Код, который вы отправили, не будет компилироваться. – Kreiri

+0

@ Kreiri i обновлен с пропущенным кодом – user2913669

+0

[Возвращаемое значение для функции внутри блока] (http://stackoverflow.com/questions/17642535/return-value-for-function-inside-a-block) – Kreiri

ответ

0

Вы можете назначить его сохраненному имуществу своего класса. Просто используйте

self.<property> = currentLocGeoPoint 
+0

Это не похоже на то, что функция async не имеет значения. – user2913669

+0

Если вы сделаете это в закрытии и это обработчик завершения, тогда он должен иметь значение. –

1

Я не понимаю понятие «Я хочу вернуть currentLocGeoPoint». Вернуть его к чему? Вы находитесь в методе CLLocationManagerDelegate, поэтому некому его вернуть.

Однако, если вы сделаете запрос (т. Е. В этом закрытии), вызовите другую функцию, которая нужна currentLocGeoPoint. Или вы можете обновить пользовательский интерфейс, чтобы отразить обновленную информацию (обязательно отправьте это обновление в основной поток, хотя). Или, если у вас есть другие контроллеры представлений или объекты модели, которые должны знать о новых данных, вы можете отправить уведомление, сообщив им, что есть обновленный currentLocGeoPoint. Но в этом методе нет никого, кому бы вы «возвращали» данные.

+0

Да, я попытался вызывать другие функции, которые нуждаются в 'currentLocGeoPoint'. Я использовал GeoPoint для создания массива, но в конечном итоге мне нужно было бы передать значение (из массива) назад к основному потоку, а также перейти к следующему viewController. – user2913669

+0

Итак, просто завершите закрытие всех необходимых свойств. Просто позвоните ему, какие бы методы вы ни хотели. Если вы хотите, чтобы контроллер второго представления знал об этом , имеют свойство в этом другом представлении c ontroller реализует в свойстве предложение 'didSet'. Или обратите внимание на уведомление. Все что пожелаете. – Rob

Смежные вопросы