5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SwiftUI: アプリの起動時に1回だけやりたい処理はどこに書けばいいのか

Last updated at Posted at 2022-08-21

自分用の時刻表アプリを作ろう、という記事を以前書いたのですが、

これに復路のViewを追加しよう、と思った時に、Viewの.onAppearに起動時に1回だけやる処理を記述していたことが問題になりました。Viewがひとつだけなら問題ないのですが、複数のViewを行ったり来たりする場合、Viewが表示されるたびに.onAppearが実行されてしまいます。

ということで、起動時に1回(だけやりたい/しかやってはいけない)処理はどこに書けばいいのか、調べてみました。

Xcodeでプロジェクトを作った時に(プロジェクト名)App.swiftなるファイルが作られたと思いますが、あれの中に書くのが正解のようです。

import SwiftUI

@main
struct MyProject1App: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

上のようになっているコードを以下のように変えます。

import SwiftUI

@main
struct MyProject1App: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate  // この行を追加する
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

// 追加
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        
        // 起動時に1回だけやる処理をここに記述する
        
        return true
    }
}

以下の環境で、動作を確認しました。
MacOS Monterey 12.5.1
Xcode 13.4.1

5
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?