プロトコル指向プログラミング(POP)でOOPの限界を超える
プロトコル指向プログラミング(POP)は、何を継承したかではなく、何ができるかで型を設計します。継承の壁をプロトコルの組み合わせで解決する方法や、避けるべき場面までSwiftの例でまとめます。
記事を読む特集トピック · 41 記事
iOS開発の基礎から実務の選択基準まで解説する記事をまとめました。
最新記事
プロトコル指向プログラミング(POP)は、何を継承したかではなく、何ができるかで型を設計します。継承の壁をプロトコルの組み合わせで解決する方法や、避けるべき場面までSwiftの例でまとめます。
記事を読むRIBsは画面ではなくビジネスロジック単位でアプリを分割します。画面を持たないコンポーネントという前提、超大規模組織でのみ使われる理由、VIPERとの違いを整理します。
記事を読むReactorKitはUIKitとRxSwiftの組み合わせで、単方向データフローを標準のようにしたフレームワークです。ViewとReactorの2つの役割、Mutationという中間段階が必要な理由、TCAとの違いを整理します。
記事を読むiOSアーキテクチャシリーズをここまで読んでいれば、選択肢はすべて出そろっています。MVC、MVVM、MVP、VIPER、Clean Architecture、MV、TCAです。
記事を読むSwiftUI時代のアーキテクチャ議論で欠かせない名前があります。Point-Freeが開発したTCA(The Composable Architecture)です。
記事を読む求人や技術ブログで「Clean Architectureベース」という表現をよく見かけます。しかし実際にコードを見ると、チームごとに形はさまざまです。UseCaseがある場合もない場合もあり、Repositoryの役割も異なります。
記事を読むiOSアプリを作っていると、いつか必ず遭遇します。1つの画面にローディング中、成功、失敗、データなしの状態が混在する瞬間です。
記事を読むSwift Copy-on-Writeは、値型を代入するとストレージを共有し、一方が変更された瞬間にだけ実際のコピーを行います。この最適化が値の意味を保ちながら、プロトタイプパターンの役割を小さくする仕組みを解説します。
記事を読むSwiftの静的ファクトリメソッドは、名前で生成の意図を示し、戻り値の型、キャッシュ、インスタンスの再利用を制御できます。initではなくstatic func makeを選ぶメリットとデメリット、GoFパターンとの違いを整理します。
記事を読むiOS開発を学んでいると、ある時点で必ずRxSwiftやCombineという壁に出会います。求人票にはほぼ必ず登場しますが、実際にコードを開くと、map、flatMap、sinkが延々と続く見慣れない構文に戸惑いがちです。「クロージャーやデリゲートで普通に動くのに、わざわざこれを学ぶ必要があるの?」…
記事を読むデザインパターンの本を開くと、終盤に必ず登場するのがインタープリタパターンです。「いったいいつ使うの?」と思って、ざっと読み飛ばしがちなパターンですよね。
記事を読むiOSアーキテクチャの中で、VIPERほど評価が極端に分かれるパターンは珍しいでしょう。
記事を読むクラスごとに似たロジックをコピペして、「何かおかしい」と感じたことはありませんか? iOS アプリで画面ごとのデータ読み込みコードを3回目にコピーする頃には、手が止まってしまいますよね。
記事を読むObjective-Cコードで角括弧に囲まれた[receiver message]構文は、一見すると普通のメソッド呼び出しに見えます。
記事を読むSwiftでアプリを作っていると、for item in arrayのようなループを1日に何十回も書きます。あまりに自然に使うため、カスタム型をfor-inで回そうとしてコンパイルエラーに遭遇して初めて疑問に思うこともあるでしょう。「このループの中では、一体何が起きているのでしょうか?」
記事を読むFacadeパターンは、複数のオブジェクトが絡み合うサブシステムに、シンプルな単一の入り口を提供します。Swiftの会員登録を例に、呼び出し順を一か所に集約する方法と、Adapter・Proxy・Decoratorとの違いを解説します。
記事を読むSwiftでiOSアプリを作っていると、ボタンをタップしたのに、なぜこのビューコントローラがイベントを受け取るのか疑問に思ったことがあるでしょう。
記事を読むState Patternは、状態ごとの振る舞いと遷移をオブジェクトやenumにまとめ、分散した条件分岐を減らします。Swiftの画面状態をリファクタリングする手順と、Strategy Patternに似て見える構造を意図で見分ける方法を解説します。
記事を読むアプリを作っていると、似たようなオブジェクトを数千、数万個も生成することがあります。地図上に数万個のマーカーを配置する機能が代表例で、このような場合はメモリグラフが上がり続けやすくなります。
記事を読むSwiftUIの紹介文書の冒頭には、必ずといってよいほど「宣言的(declarative)フレームワーク」という言葉が登場します。ReactもJetpack Composeも、自らを宣言的だと説明しています。
記事を読むiOS開発では、基本機能を変えずにロギングやキャッシュだけ追加したくなることがあります。しかしそのためにクラス継承を始めると、いつの間にか継承ツリーが複雑になりがちです。
記事を読むフォルダーの中にフォルダー、その中にさらにファイル。こうしたツリー構造をコードで扱ったことがあるなら、一度は途方に暮れたはずです。
記事を読むSwiftのファクトリ関数は、生成の意図を示す名前を付け、返却型と再利用方針を柔軟にします。initではなくstatic funcを選ぶ基準と、GoFのファクトリメソッドとの違いを整理します。
記事を読むAdapterパターンは、レガシーAPIのインターフェースを新しいコードが期待するプロトコルへ変換します。Swiftで変換の境界を作り、置き換えとテストを容易にする実装手順や、他のラッピングパターンとの違いを整理します。
記事を読む前回は、なぜMassive View Controllerが生まれるのかを扱いました。ViewとControllerを兼ねるため、行き場のないコードがすべてビューコントローラに集まってしまう、という話です。
記事を読むSwiftで開発していると、static let sharedの1行で作られたシングルトンを本当によく見かけます。
記事を読むiOS開発の勉強を始めると、必ず一度は出会う言語があります。角括弧だらけの見慣れない構文や、NSStringのような謎めいたプレフィックスです。
記事を読むSwiftでアプリを作っていると、do-catchでエラーを捕捉したのに、画面に表示するメッセージがいまひとつだった経験はありませんか。
記事を読む