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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

5641閲覧

処理が終了するのを待ってから戻り値を返却したい

mACS

総合スコア19

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

3クリップ

投稿2015/12/28 05:56

お世話になっております。
関数内でサーバーと通信し、処理結果を返却する関数を作りたいのですが、
通信処理が終了する前に戻り値が返却されてしまいます。(宣言時の値が返却される)
通信処理が終了するのを待ってから値を返却するにはどうしたらよいのでしょうか?
よろしくお願いいたします。

lang

1 2 static func test(url:String, text:String)->String{ 3 4 // 返却用変数(初期値はエラー) 5 var result:String = "error" 6 7 // POST送信 8 let request = NSMutableURLRequest(URL: NSURL(string: url)!) 9 request.HTTPMethod = "POST" 10 let myData:NSData = text.dataUsingEncoding(NSUTF8StringEncoding)! 11 request.HTTPBody = myData 12 let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data,response, error in 13 if (error == nil) { 14 // 戻り値を変数に設定 15 result = NSString(data: data!, encoding: NSShiftJISStringEncoding)! as String 16 } 17 }) 18 task.resume() 19 20 return result 21 22 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

NSConditionを使ってください。

Swift

1static func test(url:String, text:String)->String{ 2 3 // 返却用変数(初期値はエラー) 4 var result:String = "error" 5 6 let condition = NSCondition() 7 8 // POST送信 9 let request = NSMutableURLRequest(URL: NSURL(string: url)!) 10 request.HTTPMethod = "POST" 11 let myData:NSData = text.dataUsingEncoding(NSUTF8StringEncoding)! 12 request.HTTPBody = myData 13 let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data,response, error in 14 condition.lock() 15 if (error == nil) { 16 // 戻り値を変数に設定 17 result = NSString(data: data!, encoding: NSShiftJISStringEncoding)! as String 18 } 19 condition.signal() 20 condition.unlock() 21 }) 22 condition.lock() 23 task.resume() 24 condition.wait() 25 condition.unlock() 26 27 return result 28 29 }

投稿2015/12/28 17:07

Stripe

総合スコア2183

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

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

mACS

2015/12/29 06:28

解決できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問