取り組んだ方も多いのではないでしょうか。慣れ親しんだ今だからこそ理解し、得られるものがあります。裏面に取り組んでみましょう。Tourおはようございます。LINEでiOSエンジニアをしています。皆さんが日々書くコードをお見せしますが、いつもと少し違う顔を見せるかもしれません。二項演算子にしてみましたどこにもオプショナルはいません。+演算子でエラーに鳴った式を実行してみましょう同じエラー。AssignMentをTrueにIntのOptionalを返すようになりました。冒頭とおなじになりました私たちはこれらを使い分けられます。これらの実装は自然と我々を助けてくれていますではこの右辺はなにが入りますか?たとえば値を返さないクロージャーの即時実行Returnを使わない、値を返さない状態にすることです。Neverと同じです。fatalErrorも返り値がNeverです。NeverはIntのサブタイプではありません。実際に試してもTypeErrorになりますではこのクロージャーはなにでしょう型が解決された段階のASTをみてみましょう返り値はどんな型としても扱えるのですこれがなにを解決するでしょうIBOutletを!にすることがありますね実際に使う段階ではnilにならないはず。非オプショナルで扱いたいですよね。nilではなく意味のない値でもないここに先程のものを使ってみましょうClosureファンクションもクロージャーの一種ですしあまりにも大きな話題です関数オブジェクトの生成に焦点を当てますこのように作ることはありますね1つめ引数を指定していませんNestedFunctionも同様。2つめインスタンスメソッドにも書けますね。実行主が未定でも書けます。propertyを呼ぶようなものこれも自然に見えるのではクロージャーを引数に受け取るものを息をするように私たちは使います様々な場所に存在していました。関数の引数にクロージャーを渡すのは、@escapeを付けない限り、非同期で実行できなかったり関数の外の変数に保存できなかったりします。クロージャーが関数より長く存在しないことを保証してくれます。このように生存期間の制限がある引数があります。Inoutです+=は内部で引数を書き換えるのでinoutが指定されています関数が終わった後もこの引数を使うような書き方をするとコンパイルエラーになります2回書き換えます。関数の中では使われるが、関数の最後に変数の値をinout指定の変数に渡します関数の中のargは渡したtestStringとは別物ですスリープさせて間に値を覗きますところがdidSetを取り除くと関数が終わるまで書き換わっていなかったのが、書き換わってしまいましたDidSetがなければコスト削減のために参照が渡されます。引数として渡した変数の種類によって動作が異なるのです書き込み中の変数を読みに行くことは避けるべきことなので、本来はこのような動作は気にしなくてよいのかもしれません。非同期処理で意図せずそうなることもあります。遭遇した不思議な挙動を探るのは楽しいですよねinoutを使うとfunctionの終わりに値が代入されますが、終わりとはいつでしょう思い浮かぶのはdeferとreturnです。なりますこれは成功するでしょうか定義前の変数を使うとコンパイルに成功しますしかしこれはコンパイルが通りますdeferまでに初期化されていれば変数を使えるのです。これはブロックが最後に異動しているのと同じですではdidSetは何回呼ばれるでしょうか。deferでの代入が呼びます。initializerの中で値をセットしてもdidSetは呼ばれないはずですが、呼ばれてしまいます。WillSetにまかせていたら、または呼ばれない前提で描いていたら、意図しない動作になるかもしれません。willSetが呼ばれます。deferはスコープを抜けると最後に実行される、では留められない存在に思われてきました慣れ親しんだからこそ見落としていたもの、慣れ親しんだからこそ理解できるものがあります。その楽しさをお話しました素晴らしい3日間になりますように。ご清聴ありがとうございました。はてなブログPro大学時代に耳が聞こえない生徒が講義に参加できるようにリアルタイムに文字起こしするバイトをしていました。いまはエンジニアとして働きつつ、勉強会やカンファレンスで話される技術分野の知見を文章に残し、検索可能にしたり、地方で活動する方に届けたいと思っています。お役に立ちましたら、支援いただけると幸いです。(24)注目記事はてなブログをはじめよう!niwatakoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。