【SwiftUI】App Delegateとは?実装方法と使い方
この記事からわかること
- SwiftのApp Delegateとは?
- Swift UIで使用する方法
- UIKitのAppDelegate.swiftファイルとは?
- @UIApplicationDelegateAdaptorの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
iOSアプリ起動時に処理を実行させることできるApp DelegateをSwift UIで実装する方法をまとめていきます。
App Delegateとは?
App Delegate
とはiOSアプリ起動時など特定のライフサイクルの中で呼ばれる処理のことを指します。
【Swift】delegate(デリゲート)とは?使い方とメリット
UIKitフレームワークではプロジェクトを作成した場合「AppDelegate.swift」ファイルがデフォルトで作成されています。
UIKitで作成されるファイル群
├── Swiftプロジェクト
│ ├── プロジェクト名
│ ├── AppDelegate.swift
│ ├── ViewController.swift
│ ├── Main.storyboard
│ ├── Assets.xcassets
│ ├── LaunchScreen.storyboard
│ └── info.plist
│ └── プロジェクト名.xcodeproj
そのファイルの中にライフサイクルイベントを管理するクラスが生成されており、アプリ起動や停止させた際に任意の処理を実行させるためのメソッドが用意されています。
Swift UIにはAppDelegate.swift がない
しかしSwift UIを使用する場合は「AppDelegate.swift」は作成されません。代わりに「プロジェクト名App.swift」ファイルが生成されます。
import SwiftUI
@main
struct HelloWorldApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Swift UIにApp Delegateを実装する方法
Swift UIにUIKitの時に使用していたようなApp Delegateを実装するには「プロジェクト名App.swift」内にコードを記述していきます。
Swift UIではUIKitのApp Delegate機能を実装するために@UIApplicationDelegateAdaptor
と呼ばれるプロパティラッパーが用意されています。まずはこれを「プロジェクト名App.swift」ファイルに追加していきます。
import SwiftUI
@main
struct HelloWorldApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
この時点ではappDelegate
クラスが未定義のためエラーが出ますが気にせず進めてください。
クラスの作成
続いてライフサイクルを管理するためのデリゲートメソッドを保持するクラスを作成します。このクラスにはUIApplicationDelegate
プロトコルへの準拠が必要になります。新規でファイルを作成し以下の内容を記述します。
import Foundation
import UIKit
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
print("アプリが起動したよ")
return true
}
}
これでSwift UIでもアプリが起動した際などライフサイクルイベント発生時に任意の処理を実行させることができるようになります。
アプリが閉じたときに実行させる
AppDelegateでアプリが閉じたときに実行させるにはapplicationWillTerminate
メソッドを呼び出します。
class AppDelegate:NSObject,UIApplicationDelegate{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
print("アプリが起動したよ")
return true
}
func applicationWillTerminate(_ application: UIApplication) {
print("アプリを終了させたよ")
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書