Swift:似乎无法将 placesClient.currentPlace 的结果位置存储为 class 属性 以在其他地方使用

Swift: Can't seem to store the resulting place of the placesClient.currentPlace as the class property to use elsewhere

我对此很陌生,但我一直在设法获得我的 IOS 设备的当前位置......等等唯一的问题是,我不能似乎让 GMSPlace 保持分配给我在 class 顶部声明的 属性,我计划在另一个函数中使用它。

当我 运行 回调范围内的打印语句时它工作正常,但是当我似乎使用存储在 'queryPlace' 中的值时,它 returns 'nil'。我猜这是一个范围和生命周期的问题,但我不确定我是否理解正确。

这是我难以理解的代码,为什么它不会保存 'place' 的值:

import UIKit
import CoreLocation
import GoogleMaps
import GooglePlaces


class GoogleMapSearchVC : UIViewController, CLLocationManagerDelegate {
 
  var placeQuery: GMSPlace?
  
  
  func loadCurrentPosition() {
        print("Loading Positions and Coords")

        // Invoke Callback method to get GMSPlacesLiklihood
        placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in
            
            
            if let error = error {
                print("Pick Place error: \(error.localizedDescription)")
                return
            }
            
            if let placeLikelihoodList = placeLikelihoodList {
                let place = placeLikelihoodList.likelihoods.first?.place
                if let place = place {
                    
                    self.updateMap(newLocation: place)
           // updateMap function moves camera to current location.
                    
                    self.placeQuery = place
           // If I print(self.placeQuery) here, it works fine, but later on placeQuery returns nil.
                }                
            }           
        })    
    }
    
  func doSomethingWithPlace() {
  
      print(self.placeQuery?coordinate.latitude)
      // Returns 'nil'
  }

}

提前感谢您的帮助,非常感谢。

不,不应该有任何 "lifetime" 问题。 placeQuery 绑定到视图控制器实例的生命周期。

只是一个愚蠢的猜测(抱歉,如果这是显而易见的):你确定 doSomethingWithPlace() 在 回调返回后访问变量 吗?由于您仅在异步回调中设置它,因此当 loadCurrentPosition() returns.

时不会设置变量

如果这不是问题,这里有一个调试提示,可以找出该值在哪里设置回 nil:您可以在变量声明行设置一个断点,调试器将在setter。如果您更喜欢 "print debugging",您还可以添加一个 didSet 子句:

var placeQuery: GMSPlace? {
    didSet {
        print("setting placeQuery from \(oldValue) to \(placeQuery)")
    }
}