[SwiftUI] SwiftUI Previewの使い方

SwiftUI

Previewは、コード変更中でも動的にアップデートされて非常に便利なんですが、Viewが期待する変数が、Binding変数だったり、Environment変数だとうまく動きません。
以下、対応方法です。

Binding変数を期待しているケース

以下のようなコードを例に説明します。

View例

struct ConfigView: View {
    @Binding var isConfigView:Book
    var body: some View{
      ....
    }
}

固定値で与えるのが、シンプルで良いです。(以下は、常にTRUEのBinding変数を与えています。)

Preview例

ConfigView(inConfigView: .constant(true))
ConfigViewは、inConfigViewという変数がBindingであることを期待しているので、与えられないとPreviewであっても、うまく初期化できません。なので、適当な変数を与える必要があります。




EnvironmentObjectを期待しているケース

次に、以下のようなコードを例に説明します。

View例

struct ConfigView: View {
    @EnvironmentObject var clockClipModel:ClockClipModel
    var body: some View{
      ....
    }
}

実際には、親Viewであったりで.environmentObject()を使って付与されているケースが多いと思うのですが、Previewには、親Viewはありませんので、自分で付与する必要があります。

Preview例

struct ConfigView_Previews: PreviewProvider {
    static let clockClipModel = ClockClipModel()
    static var previews: some View {
        ConfigView(inConfigView: .constant(true)).environmentObject(clockClipModel)
    }
}
ConfigViewは、内部で、clockClipModelを、environmentObjectとして参照しているので、ここで付与しています。
MEMO
Previewのコードを見るとわかるのですが、staticで定義されているので、変数もstaticに定義する必要があります。

説明は以上です。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です