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

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

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

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

Swift

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

解決済

Swift で元いたスレッドに戻れるようにしたい

sont
sont

総合スコア0

iOS

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

Swift

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

1回答

0評価

0クリップ

1379閲覧

投稿2019/04/07 09:33

現在、以下のような関係にある、myFunc1() と myFunc2() があります。

swift

func myFunc1() { let dispatchQueueA = DispatchQueue(label: "QueueA") print("1. Current Thread: \(Thread.current)") dispatchQueueA.async { print("2. Current Thread: \(Thread.current)") myFunc2(completion: { print("3. Current Thread: \(Thread.current)") print("Completed!!!") }) } } func myFunc2(completion: @escaping () -> Void) { let dispatchQueueB = DispatchQueue(label: "QueueB") dispatchQueueB.async { print("4. Current Thread: \(Thread.current)") // この処理は元のThread(myFunc2()が呼ばれたThread)に戻して処理したい completion() } }

myFunc1()をMainThreadから呼び出したところ、

  1. Current Thread: <NSThread: 0x600002db5440>{number = 1, name = main}
  2. Current Thread: <NSThread: 0x600002dade40>{number = 3, name = (null)}
  3. Current Thread: <NSThread: 0x600002daddc0>{number = 4, name = (null)}
  4. Current Thread: <NSThread: 0x600002daddc0>{number = 4, name = (null)}

Completed!!!

このようなログを得ました。
上記コメントにも書いた通り、myFunc2は呼び出された後に、自分で独自のThreadを作成し、その中で処理をした後、completion()というクロージャを呼び出しています。
このcompletion()を呼び出す際には、元のThread、つまり、myFunc2を呼び出したThreadに戻してから処理をしたいのですが、どのようにすれば良いでしょうか?
MainThreadから必ずmyFunc2が呼び出されるのであれば、

swift

DispatchQueue.main.async

を使ってやればいいのですが、myFunc2がどのスレッドから呼び出されるかは必ずしも固定はされていません。
どのようにしてやれば、myFunc2の呼び出し元のスレッドに戻すことができるでしょうか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

iOS

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

Swift

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