2017-01-19 2 views
0

私が達成したいことの基本的な考え方を与えるために、ユーザーの現在地をズームインしてそのズームレベルでユーザーを追跡するマップ。私が持っているview_did_loadでswift - デリゲートメソッドの戻り値を使用して変数を設定する

:その下

let span = MKCoordinateSpanMake(0.075, 0.075) 
    let region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: currentLat, longitude: currentLong), span: span) 
    map.setRegion(region, animated: true) 

を私は私の場所の管理者のための委任機能を持っている:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) -> (lat: CLLocationDegrees, long: CLLocationDegrees) { 
    let userLocation:CLLocation = locations[0] 
    let currentLong = userLocation.coordinate.longitude 
    let currentLat = userLocation.coordinate.latitude 
    return (currentLat, currentLong) 
} 

が設定するには、このデリゲートメソッドからの戻り値を使用することが可能です私の地域変数を宣言する緯度と経度?現在私がこれを試してみると、 "定数" currentLat 'は初期化される前に使用され、 "constant' currentLong 'は初期化される前に使用されます。私のアプローチはソリューションとはまったく異なるかもしれませんが、あなたが提供できる何か助けてくれてありがとう!

答えて

0

いいえ;戻り値を追加して関数のタイプを変更した場合、LocationManagerは変更された関数を呼び出さず、戻り値を使用することはほとんどありません。メソッドのシグネチャが関数に完全に一致しない場合、その名前が何であっても、CLLocationManagerDelegateプロトコルは実装されません。

代わりに、あなたのviewControllerの一部である場合は、単にdidUpdateLocations関数内でMapViewを更新するか、CoreLocationManagerをラップするシングルトンを持っている場合は、通知を送信し、マップViewControllerが通知を受け取り、通知が受信されると、mapView

+0

ありがとうございました。私はdidUpdateLocations関数を変更してマップ自体を更新しました。しかし、私はこの関数内で私のviewDidLoadから上記のコードを置くとき、それは "メンバー 'マップ'への"あいまいな参照 "と言います。 –

+0

しばらくの間騒がれた後、私は "region"変数の値を変更するためだけに新しい、異なる関数を作成しました。これを達成するためには、「地域」をグローバル変数にしなければなりませんでした。私のコードは、デバイス上でテストするときには動作しますが、シミュレータ上ではテストされません。 –

関連する問題