声明类变量的问题

时间:2017-05-10 16:55:02

标签: swift3

我在我的项目中实施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吗?对我来说,谷歌文档不正确似乎很奇怪。 感谢。

2 个答案:

答案 0 :(得分:0)

通过声明可选的!你告诉编译器每当我访问这个可选项时它都会有一个值。这意味着你不必坚持!每当你使用它时最后。但它确实意味着如果您没有将可选项设置为具有值,则在访问它时会出现错误。

使用one的一个示例是您在viewDidLoad()中设置的UIViewController的类成员。您不需要为视图控制器设置单独的init()函数来初始化变量,但您几乎可以保证代码的入口点是viewDidLoad(),并且任何后续代码运行都将具有有效的版本这个班级成员。

搜索隐式解包的选项以获取更多详细信息

答案 1 :(得分:0)

当有可能有mapView时你应该选择mapView。你应该总是这样做

 let mapView = GMSMapView(frame: self.view.bounds)