初回起動だけ特別なビューを表示する
インストール直後の初回だけ特別なビューを表示する方法を紹介します。
まず準備として、特別なビューと通常使うビューを用意します。本記事ではビューの名前を下記のようにします。
・特別なビュー: ViewWelcome
・通常のビュー: ViewMain
また、アプリケーションが初回の起動かどうかを判断するのに UserDefaults の機能を使います。
特別なビュー ViewWelcome
初回だけ表示したいビューのコードを準備します。
コードの中の格納キー名称の文字列は uuuApp.UDF_KEY_FLAG_FIRST_STARTUP という static な定数として定義しました。アプリケーションの名前は本記事では uuu です。static で定義しているのでアプリケーションのどこからでも、このキー文字列を使うことができます。
import SwiftUI
struct ViewWelcome: View {
@Binding var FlagFirstStartup: Bool
let FONT_SIZE = 36.0
var body: some View {
VStack {
Text( "Welcome" )
.font( .system( size: FONT_SIZE ))
Button(action: {
// バインディングされたフラグ変数を変更する.
FlagFirstStartup = false
// 2回目は該当のキーが false となるようにフラグを仕込む.
UserDefaults.standard.set( FlagFirstStartup, forKey: uuuApp.UDF_KEY_FLAG_FIRST_STARTUP )
}){
Text( "Close" )
.font( .system( size: FONT_SIZE ))
}
}
}
}
struct ViewWelcome_Previews: PreviewProvider {
static var previews: some View {
ViewWelcome( FlagFirstStartup: .constant( true ) )
}
}
通常のビュー ViewMain
初回以降に表示したい通常のビューのコードを準備します。
import SwiftUI
struct ViewMain: View {
var body: some View {
Text( "hello, world." )
.font( .system( size: 48.0 ))
}
}
struct ViewMain_Previews: PreviewProvider {
static var previews: some View {
ViewMain()
}
}
起動時の処理
アプリケーションの名前は本記事では uuu です。起動時に UserDefaults に仕込まれている設定値を読み込みます。
設定値のキー文字列は static で定義しているのでアプリケーションのどこからでも、このキー文字列を使うことができます。
インストール直後は UserDefaults 設定値はしこまれていません。そもそもその設定キーが存在しないはずです。初期設定値が存在するか調べるには UserDefaults.standard.object() の戻り値が nil かどうかで判断します。
import SwiftUI
@main
struct uuuApp: App {
@State var FlagFirstStartup: Bool
// 初回起動のフラグ変数の格納キー名称.
public static let UDF_KEY_FLAG_FIRST_STARTUP = "Key_FlagFirstStartup"
init() {
// 初期設定に該当のキーがあるかどうか調べる.
if UserDefaults.standard.object( forKey: uuuApp.UDF_KEY_FLAG_FIRST_STARTUP ) == nil {
// 初期設定にキーがなければ初回起動とみなす.
FlagFirstStartup = true
} else {
// キーの値をみて初回起動かどうか判断する.
FlagFirstStartup = UserDefaults.standard.bool( forKey: uuuApp.UDF_KEY_FLAG_FIRST_STARTUP )
}
}
var body: some Scene {
WindowGroup {
// バインディングされた変数をContentView()に渡す.
ContentView( FlagFirstStartup: $FlagFirstStartup )
}
}
}
特別のビューと通常のビューを切り分けるビュー
このビューが最初に開かれます。uuuApp.swift の中で ContentView( FlagFirstStartup: $FlagFirstStartup ) として @Binding の引数付きで生成しているので、それが引き継がれます。
FlagFirstStartup の true / false を評価して ViewWelcome / ViewMain のどちらを表示するか、場合分けをします。
ViewWelcome を閉じるときに FlagFirstStartup を false にしつつ UserDefaults に設定値を書き込んでいるので、2度と ViewWelcome が表示されることはありません。
import SwiftUI
struct ContentView: View {
@Binding var FlagFirstStartup: Bool
var body: some View {
// フラグによってどちらのビューを表示するか決める.
if FlagFirstStartup {
// 初回の起動しか表示しないウェルカムビュー.
ViewWelcome( FlagFirstStartup: $FlagFirstStartup )
} else {
// 通常のビュー.
ViewMain()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView( FlagFirstStartup: .constant( true ) )
}
}