Swiftの拡張機能(ExtensionとProtocol)を徹底解説!UI層のProtocol設計とViewModel・Repositoryの接点
生徒
「先生、SwiftでExtensionとかProtocolってよく聞きますけど、どうやってUIの設計に関係してくるんですか?」
先生
「いい質問ですね。Extensionは既存のクラスや構造体に機能を追加する仕組みで、Protocolは“ルールブック”のようなものです。UI層では特に、ViewとViewModel、Repositoryのやり取りを整理するために使いますよ。」
生徒
「ルールブック?ちょっとイメージがわかないです。」
先生
「例えばゲームをするときに“ボールを投げる”“キャッチする”というルールがあるとしますよね。Protocolはまさにそのルールで、誰が遊ぶか(ViewModelやRepository)が違っても、ルールを守って遊べるわけです。」
1. SwiftのExtensionとは?
SwiftのExtension(拡張機能)は、すでに存在しているクラスや構造体、列挙型などに、新しいメソッドやプロパティを追加できる仕組みです。元々の定義を書き換える必要がないため、安全にコードを拡張できます。
例えば、文字列に便利な機能を追加したいときに使います。
extension String {
var isNotEmpty: Bool {
return !self.isEmpty
}
}
let name = "Swift"
print(name.isNotEmpty) // true
このように、Extensionを使うとコードが読みやすくなり、再利用性も上がります。
2. SwiftのProtocolとは?
Protocol(プロトコル)とは、いわば「設計図」や「契約書」のようなものです。どんなメソッドやプロパティを持つかを決めるだけで、中身は書きません。そのため、複数のクラスや構造体が同じルールを守って実装できます。
protocol Animal {
func makeSound()
}
class Dog: Animal {
func makeSound() {
print("ワンワン")
}
}
class Cat: Animal {
func makeSound() {
print("ニャー")
}
}
ワンワン
ニャー
このように、Protocolを使うと「異なるクラスでも同じルールで振る舞う」ことができます。これが大規模アプリ開発では特に役立ちます。
3. UI層のProtocol設計とは?
SwiftUIやUIKitでアプリを作るとき、UI(画面部分)とビジネスロジック(処理部分)を分ける設計が重要です。ここでProtocolが役立ちます。
例えば、ViewModelはUIに表示するデータを用意する役割を持ち、RepositoryはデータベースやAPIから情報を取得する役割を持ちます。このとき、ViewModelとRepositoryのやり取りをProtocolで定義しておくと、柔軟でテストしやすい設計になります。
4. ViewModelとRepositoryをProtocolでつなぐ例
ここでは簡単な例として、ユーザー名を取得して画面に表示するケースを考えましょう。
protocol UserRepository {
func fetchUserName() -> String
}
class APIUserRepository: UserRepository {
func fetchUserName() -> String {
return "山田太郎"
}
}
class UserViewModel {
private let repository: UserRepository
init(repository: UserRepository) {
self.repository = repository
}
func getUserName() -> String {
return repository.fetchUserName()
}
}
このように設計すると、UserViewModelはUserRepositoryというルールにだけ依存するので、後から別のRepositoryに差し替えることが簡単になります。例えば、テスト用のダミーRepositoryを作ることも可能です。
5. ExtensionとProtocolを組み合わせる
さらにExtensionとProtocolを組み合わせると、共通の処理をまとめて書けるようになります。
protocol Greeting {
func sayHello()
}
extension Greeting {
func sayHello() {
print("こんにちは!")
}
}
class Person: Greeting {}
let p = Person()
p.sayHello() // こんにちは!
このように、Protocolにデフォルト実装をExtensionで追加することで、実装クラス側ではコードを書かずに共通の動作を使えるようになります。
6. UI層での実際の利用イメージ
実際のUI層では、ViewはViewModelを通じてデータを受け取り、その裏でRepositoryが動きます。Protocolを利用することで、UI層は「どのRepositoryが裏にあるか」を意識せずにデータを使えます。
これはまるで、コンビニでおにぎりを買うときに「どの工場で作られたか」を知らなくても食べられるのと同じです。UIはRepositoryの実装に依存せず、決められたProtocolを通じてやり取りするだけで済みます。
Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略
Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略
「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。
Windowsで実現する開発環境
【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。
【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。
この60分で得られる3つの理解
OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。
iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。
将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。
※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。
Windowsで始めるiPhoneアプリ開発入門