iOS

Swift4:サブスレッドで同期処理

iOSの同期処理の仕方をそもそもわかっていないこともあり、少し苦労しました。

訂正:サンプルプログラムへの影響はありませんが、画像で貼り付けたコードは正しく動作していないことが判明しました。呼び出されたB側でExecLink()を呼び出していたため、同期処理をしないものと同様の動作になってしまい、正しい結果が得られていました。

しかし@shtnkgmさんに助けて頂きました。感謝です。参照したページはSwiftで複数の非同期処理の完了時に処理を行うです。

そもそも根本的につまづいた点は、main threadでないと同期がうまくいかない(暴走してしまう)という点です。これは2行追加すればいいと教えてもらい、すぐにやってみたのですが、ロジックはうまく通っているのですが、UIに結果が反映されません。バグだとわかっていても、すぐに検出できず、一晩寝て、今朝、1行削除し過ぎたことに気づきました。

やりたかったこと:

  • 「UITextViewの選択された文字列にリンクを入れる」とき、リンクを予め用意したUITextFieldに入れるのでなく、ポップアップ画面を出して入れるようにしたい。
  • そうすれば、UITextFieldを画面に用意しなくてすみます。

Screenshot 2018-05-24 19.38.46

Xcode9.3.1サンプルコードはここにあります。コードは基本的に@shtnkgmさんがアップされているものと同じです。

 

 

 

Categories: iOS, Swift, 技術