質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1361閲覧

swift 関数が呼び出される順序 変数の格納され方

unchi

総合スコア12

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/09/17 17:46

経緯度から住所を求める関数を求める関数を作成しました
これを実行したときのコンソールも下に乗せます。
コンソール内を見る限り、最後にあるprintがif内にあるprintより先に行われているようにみえます。
仮にif内に最初に入ってlocnameに代入が行われたとして、locnameの中身が消えるのでしょうか?そうならば、C言語のように変数引き渡しのみがおこなわれて何も帰って来ないということでしょうか。
それなら、ポインタを使うべきですか?

swift

1func geocode(taploc:CLLocation)-> String { 2 let geocoder = CLGeocoder() 3 var locname: String = "名無し" 4 5 geocoder.reverseGeocodeLocation(taploc) { (placemarks, error) in 6 if let placemarks = placemarks { 7 if let pm = placemarks.first { 8 locname=pm.name! 9 print("name: " + locname) 10 } 11 } 12 } 13 print(locname) 14 return locname 15 }

コンソール(京都駅の経緯度を与えた時のものです)

名無し
name: 京都

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

非同期処理が行われているので、最後のprint(locname)が先に行われ、
結果が帰ってきたところで、遅れてprint("name", locname)が実行されます。

非同期処理から返値を得たい場合、通常はClosureを用います。
下記を参考にしてください。
https://qiita.com/netetahito/items/2c12a19a0a30237b1176

あ、GCDというのでも実現できました。
そちらも調べてみてくださいね。

投稿2019/09/17 22:11

編集2019/09/18 12:46
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unchi

2019/09/18 18:29

ありがとうございました! 複雑で分かりにかったですが、なんとか実装できました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問