おすすめ書籍はじめにこんにちはsuzukiです「SwiftUI」が発表されました。レイアウト作成がとてもしやすそうでした。触りやすそうに思えたのですが、業務ではデザインの指示書で細かい指示が出る場合が多いのです。細かいレイアウトも記述した時のコード全体の見易さが気になるところです。self]と記述していました。self]とは、非所有参照でselfをキャプチャする事です。メモリリークを防ぐため、クロージャー内で新しい非所有参照のselfを使い循環参照を起こらなくします。self]はキャプチャされたselfが削除されないことが前提です。通信中にナビゲーションの閉じるボタンが有効だったため、自画面が削除されてアプリが落ちてました。通信環境が良い時はレスポンスがすぐ返却されるため自画面の削除前にクロージャが呼ばれるのですが、不安定な回線でレスポンスが遅れた時に自画面が閉じられクラッシュしていました。iOSの設定アプリからデベロッパを選択し通信環境を変更して再現をしました。その上で、通信中に自画面を閉じたら、見事にクラッシュしました。普段の開発環境で通信環境が悪いときの挙動をテストするなどはこちらの機能がとても便利です。使うサンプルのプログラムを作成しました。Notificationを利用して非同期の処理を通信から通知に置き換えております。self]は記述不要ですが、動作確認のため記述しています。self]を使用しているコードです。{NotificationCenter.default.removeObserver(self)}}画面表示時に下記を行っています。通知の受信設定”endAsyncMethod”の通知を受信したら、self.updateLabel()を行う2秒後に通知”endAsyncMethod”を行う2秒以内にナビゲーションの戻るをタップするとアプリがクラッシュします。self]に置き換えました。クロージャの記述を下記のように切り替えています。self]ですが、クロージャーに自分の参照を渡す際にキャプチャされるselfがオプショナルで渡せます。else{return}でselfがnilの時にUIの更新を行わせないように記述をすることが可能です。self]そのものが悪いのではなく、途中で設計の周知ができなかった、引き継ぎで情報共有が不十分であった、等でバグを発生させてしまったように思えます。self]を利用するため、途中で閉じれないように制御されていたためです。selfに]置き換えましたが、保存処理やフラグ管理が入り乱れてたら簡単には判断できませんでした。初期設計とドキュメントのいいところと悪いところ両方を感じたバグでした。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスサイト上に表示された文字を入力してください。こんにちは、nukkyです。私たちは無料アプリもリリースしています、ぜひご覧ください。下記のアイコンから無料でダウンロードできます。