2016-06-28 12 views
0
func forwardGeocoding(address: String) { 
    CLGeocoder().geocodeAddressString(address, completionHandler: { (placemarks, error) in 
     if error != nil { 
      print(error) 
      return 
     } 
     if placemarks?.count > 0 { 
      let placemark = placemarks?[0] 
      let location = placemark?.location 
      let coordinate = location?.coordinate 
      print("\nlat: \(coordinate!.latitude), long: \(coordinate!.longitude)") 
      if placemark?.areasOfInterest?.count > 0 { 
       let areaOfInterest = placemark!.areasOfInterest![0] 
       print(areaOfInterest) 
      } else { 
       print("No area of interest found.") 
      } 
     } 
}) 


     var INITIAL_DESTINATION = forwardGeocoding(initialDestination) 

     var DESIRED_DESTINATION = forwardGeocoding(desiredDestination) 

     var location = CLLocationCoordinate2DMake(<#T##CLLocationDegrees#>, <#T##CLLocationDegrees#>) 

こんにちは、私はマッピングアプリを作ろうとしており、この部分に問題があります。私がしたいことはINITIAL_DESTINATIONの緯度と経度を分けることができます。 CLLocationCoordinate2DMakeを作成するには、これを行う必要があります。私がしようとしてきたのは、INITIAL_DESTINATION.latitudeINITIAL_DESTINATION.longitudeを使用していますが、私は同じエラーである"Value of tuple type "()" has no member "latitude"に続いています。これはまた、INITIAL_DESTINATION.longitudeのエラーを与えないので、奇妙です。速い地理緯度経度と経度の分離とCLLocation2DMakeへの作成

ご意見やご提案は大変ありがとうございます。お読みになり、お返事いただきましてありがとうございます。

答えて

0

この関数は何も返さず、非同期補完ハンドラで返された値は何も返しません。あなたは非同期の結果を取って、何らかの方法でそれを使う必要があります。

これを試してください:機能の最後と完了ハンドラの内側に印刷して、コードを実行してください。ブロック内のコードは、リモートWebサイトがネットワーク経由で応答を返すまで実行されないため、完了ハンドラが実行される前に関数が実行されていることがわかります。その時点で、Alamofireは完了ブロックのコードに結果を渡します。

また、iOSには複数のキューがあり、UIの変更はメインキューでのみ行うことができます。完了ブロックはメインキュー上では実行されませんが、ネットワークから返された情報を使用する可能性が高いため、dispatch_async関数を使用してプログラム内の関数を呼び出してメインキューで実行する必要があります。

+0

ボイド関数だと言われていたので、最初に '?coordinate.latitude'と' return coordinate?.longitude'を返そうとしたときにエラーが発生しましたので、 'func forwardGeocoding (address:String) - > Double'ですが、それでも私にはエラーが出ます。それを修正するための提案はありますか?同様に、私が補完ハンドラに追加するものを詳しく教えてください。読んでいただきありがとうございます。 –

+0

関数が復帰するのに役立つものは何もありません。補完ハンドラは、おそらく更なる処理の目印を渡す関数を呼び出す必要があります。 – Feldur

+0

この関数で行う唯一の目的は、緯度浮動小数点数と経度浮動小数点数を返すことです。 –