我在我的项目中实施Google地图,因为MKLocalSearch没有完整的餐厅/酒吧列表。我正在关注Google的文档。我相信我已经发现了一个问题,并就如何解决问题寻求建议。
第一步是在班级的变量声明:
var locationManager = CLLocationManager()
var currentLocation: CLLocation?
var mapView: GMSMapView!
var placesClient: GMSPlacesClient!
var zoomLevel: Float = 15.0
按照其余的说明操作后,我的程序在mapView行上仍然失败:
let camera = GMSCameraPosition.camera(withLatitude: defaultLocation.coordinate.latitude,
longitude: defaultLocation.coordinate.longitude,
zoom: zoomLevel)
mapView = GMSMapView.map(withFrame: view.bounds, camera: camera) //Fails here!
调试器中的错误消息是:致命错误:在解包可选值时意外发现Nil。
所以问题是为什么Google documentation以它的方式声明mapView变量?不是所有非可选变量都必须用值初始化吗?我应该将变量声明为Optional吗?对我来说,谷歌文档不正确似乎很奇怪。 感谢。
答案 0 :(得分:0)
通过声明可选的!你告诉编译器每当我访问这个可选项时它都会有一个值。这意味着你不必坚持!每当你使用它时最后。但它确实意味着如果您没有将可选项设置为具有值,则在访问它时会出现错误。
使用one的一个示例是您在viewDidLoad()中设置的UIViewController的类成员。您不需要为视图控制器设置单独的init()函数来初始化变量,但您几乎可以保证代码的入口点是viewDidLoad(),并且任何后续代码运行都将具有有效的版本这个班级成员。
搜索隐式解包的选项以获取更多详细信息
答案 1 :(得分:0)
当有可能有mapView时你应该选择mapView。你应该总是这样做
let mapView = GMSMapView(frame: self.view.bounds)