Header Ads(他スクリプト)

(技術メモ)Twitter REST APIを使った同期通信

Twitter REST APIを使って、ホームタイムラインの取得を同期通信で行う方法メモ。


基本的にはセマフォを利用する。

    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()
        }

    }


正直、自信ないが。

0 件のコメント

Powered by Blogger.