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())
}
}