【SwiftUI】App Delegateとは?実装方法と使い方

この記事からわかること

  • SwiftApp Delegateとは?
  • Swift UI使用する方法
  • UIKitAppDelegate.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学習に使用した参考書

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index