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

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

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

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

4061閲覧

APIKitにおける非同期通信を同期的に扱う方法(Alamofireでも可)

yukitoto

総合スコア53

Swift

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/05/09 00:38

編集2016/05/09 02:03

ただいまAPIKitを利用してAPIのクライアントアプリをSwiftで書いています。

そこでAPIKitを利用したリクエストのレスポンスに応じた処理を実行したいのですが、リクエストの処理が非同期通信のため、レスポンスを受け取る前にその後に実行して欲しい処理が走ってしまいます。
コールバックを利用した実装も検討したのですが、ロジックの分離が不可能になるのでできれば避けたいと思っています。

以下が実際のコードの例になります。レスポンスがかえってくる前にreturn loginResultが実行されてしまいます。

何卒よろしくお願いします!

let loginResult = false let request = API.UserSession.LogInWithOauth(provider: provider, uid: uid) Session.sendRequest(request) { result in switch result { case .Success(let user): loginResult = true case .Failure(let error): loginResult = false } } return loginResult

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

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

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

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

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

guest

回答1

0

ベストアンサー

未検証です。

swift

1//セマフォ作成 2let semaphore = dispatch_semaphore_create(0) 3 4Session.sendRequest(request) { result in 5 : 6 //処理が終わったらsignalを送る 7 dispatch_semaphore_signal(semaphore) 8 print("signal!") 9} 10 11//signal待ち 12print("waiting...") 13while dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW) != 0 { 14 NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow: 10)) 15} 16print("done.")

投稿2016/05/09 02:37

編集2016/05/09 03:54
fuzzball

総合スコア16731

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

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

yukitoto

2016/05/09 03:08

ご回答ありがとうございます!!大変参考になります! ただ、APIKitの場合(Alamofireもだと思うのですが)、Responseの中がmainのdispatch?で処理が行われているのでResponseの処理が行われず停止してしまうんですよね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問