今知っていること

  • クラス
    • クラスは[[SomeClass alloc] init] とかSomeClass.init(with: value) みたいなイニシャライザでインスタンスを作る。
    • メソッドにはクラスメソッドとインスタンスメソッドがあり、後者はオブジェクトに備わっている
    • 昔の現場ではmybatis使ってるサーバ側に合わせて単なるマッパーでしかないモデルクラスを作っていて案の定コントローラが肥大し、途中でモデル側に最低限のメソッドを積むようにしていた。
  • 構造体
    • 構造体は値型、クラスは参照型
    • SwiftについてはCoWのため別のところに代入しても何か変更を加えなければメモリを消費しないらしい
  • 参照型はfor文とかでarrayの中身を取り出して処理していると気づいたら変わっているので好き
    • 知らないところで変わっていると死ぬ
    • objcはmutable型があったため区別は一応ついたしswiftは基本immutableで進められるから安心感がある
  • クロージャは仕事じゃないと絶対に(面倒で)使わなかっただろうけど今はこれなしで処理作れない(arrayの処理をfor文でなくブロック式でやるように指導してくれた先輩には感謝しかない)
    • [weak self] は正直なんとかしたい感はある
    • 油断するとネストが深くなり「これがコールバック地獄か・・・」という気持ちになれたので早くaysnc await欲しい
  • 関数プログラミングはよくわからないけどswiftでmap, reduce, etc. ができたおかげでtotalXXXな変数をmutableで宣言→すぐ下でfor文回すみたいなコードを作らなくてよくなってQOLが上がった。
  • main関数は特別
    • objcでも実はmain関数から始まっていた(クラッシュしたときに見ることが割とよくあった)。Swiftで最初から作ったアプリだと見ないなあ
  • テストは大事
    • 最初のところだと単機能の実装に対してexcelで100超えの項目書を作っていたがもうやりたくない
    • XCTest最高!ModelとViewModelなら境界値とシンプルなユースケースは網羅できて幸せ
    • 現実的なUITestってあるのかなあ
  • nil(null)の取り扱いは面倒臭い
    • Optionalは本当に助かってる。nilが入る可能性のない箇所と仕方なく入る箇所が切り分けられるのでコーディングに不安がないし、Javaぬるぽ踏んだので勘弁して欲しい
  • ポインタはわからない
    • objcでは雰囲気で使ったけどよく考えたらNSInteger系は値型だったからアスタリスクつけなくても良かったのかな?付けなくてもいいのにNSInteger *intValue にしたせいで不具合になっていた以前の現場を思い出した
  • メモリ管理よくわからない
    • ARC時代しか知りません(autorelease poolは稀に使った(もう覚えていない))
    • 稀にメモリリークすることがあり、古参の先輩がMRC時代の手動管理の話をしてくれたことがあった
    • objc, Swift はC言語系で参照カウント方式とかJava系はGCがあるという概念の話は聞いている