1
1

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 5 years have passed since last update.

Working with UI Controlsチュートリアルが動かない件の対処

Posted at

Working with UI Controlsチュートリアルが動かない件の対処

SwiftUIのユーザ入力画面チュートリアルWorking with UI Controlsですが、チュートリアルの通り実装を行っても、ProfileHome.swiftのPreview(Canvas)が動きません。

以下の2点を解消することで動作させることができます。

画面が表示されない

.onAppearにおいて、初期化されていないuserDataにアクセスしているため。

初期化すればよいので、以下のようにしてEnvironmentObjectを初期化しましょう。

ProfileHost.swift

struct ProfileHost_Previews: PreviewProvider {

    static var previews: some View {
        ProfileHost()
+        .environmentObject(UserData())
    }
}

サマリー画面が表示されない

Canvas環境ではeditModeの環境変数が初期化されていないため。

これはXCode側の問題ですが、Appleが本件に対処するまでは、以下のように試験対象ビューにラッパーを噛ませて、ラッパー側でeditModeの実体を宣言することで対応できます。

ProfileHost.swift
+
+struct PreviewWrapperView: View {
+    @State var editMode : EditMode = .inactive
+
+    var body: some View {
+        return ProfileHost().environment(\.editMode, $editMode)
+    }
+}
+
struct ProfileHost_Previews: PreviewProvider {

    static var previews: some View {
-        ProfileHost()
+        PreviewWrapperView()
    }
}

最終形

上記2点を併せたソースがこちらです。

ProfileHost.swift
struct PreviewWrapperView: View {
    @State var editMode : EditMode = .inactive

    var body: some View {
        return ProfileHost().environment(\.editMode, $editMode)
    }
}

struct ProfileHost_Previews: PreviewProvider {

    static var previews: some View {
        PreviewWrapperView()
        .environmentObject(UserData())
    }
}
1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?