(技術メモ)Twitter REST APIを使った同期通信
Twitter REST APIを使って、ホームタイムラインの取得を同期通信で行う方法メモ。
基本的にはセマフォを利用する。
ただし、sendTwitterRequestメソッドは、Completion(コールバック)処理をメインスレッドの後ろに挿入するようで、このままだとデッドロックとなる。
簡単な解決方法として、このメソッド(getTimeline)自体を、別スレッドで”同期実行”してやる。
こんな感じ
正直、自信ないが。
基本的にはセマフォを利用する。
func getTimeline() {
//セマフォ
let semaphore = DispatchSemaphore(value: 0)
//リクエスト実行
client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
if connectionError != nil {
fatalError()
}
do {
//処理
//セマフォ
semaphore.signal()
} catch _ as NSError {
fatalError()
}
}.resume()
//セマフォ
semaphore.wait()
}
ただし、sendTwitterRequestメソッドは、Completion(コールバック)処理をメインスレッドの後ろに挿入するようで、このままだとデッドロックとなる。
簡単な解決方法として、このメソッド(getTimeline)自体を、別スレッドで”同期実行”してやる。
こんな感じ
func showTimeline() {
let queue = DispatchQueue.global()
queue.async {
getTimeline()
}
}
正直、自信ないが。
Post a Comment