2017-05-10 12 views
0

MKLocalSearchにレストラン/バーの完全なリストがないため、プロジェクトでGoogle Mapsを実装しています。私は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が見つかりました。

なぜ、はmapView変数を宣言しているのですか?オプションではないすべての変数を値で初期化する必要はありませんか?変数をOptionalとして宣言すべきですか? Googleドキュメントが間違っていると私には奇妙に思えます。おかげさまで

答えて

0

!私はこのオプションにアクセスするたびにコンパイラに値を持つことを伝えています。それはあなたが執着する必要はないことを意味します!あなたがそれを使うたびに最後に。しかし、オプションに値を設定していないと、アクセスしたときにエラーが発生します。

viewDidLoad()で設定するUIViewControllerのクラスメンバーを使用する例があります。変数を初期化するためにView Controllerに別のinit()関数を設定する必要はありませんが、コードのエントリポイントがviewDidLoad()であることを保証することができ、その後のコード実行ではこのクラスの有効なバージョンメンバー。 MapViewを持つかどうかの可能性がある場合には、オプションのMapViewを取る必要があり、より詳細

+0

コードを見ても、関数呼び出しGMSMapView.map()のパラメータがnilでないかどうかを確認する必要があります。 – Spads

0

のための暗黙的アンラップOptionalsため

検索。

let mapView = GMSMapView(frame: self.view.bounds) 
関連する問題