【SwiftUI】Bindingプロパティを使用した時のPreviewProviderでエラーが出る件

この記事は約3分で読めます。

プレビュー機能において、Bindingを付与したプロパティを使用しようとすると、PreviewProvideでエラーが発生し、プレビュー機能が使用不可となり、不便だったため解決方法を調べてみました。

プレビューが使用可能になった方法

@Bindingを使用する際に上位View(下記コードではPreviewProvider部分)で@Stateを付与したプロパティを使用しています。

さらにPreviewProviderから渡すプロパティは「static」を付与しておく必要があります。

import SwiftUI

struct TextEditorSample: View {
    // 編集した文字列を格納するプロパティをBindingで宣言
    @Binding var inputText: String
    
    var body: some View {
        VStack {
            Text("テキストエディタ")
            // テキストエディタを表示し入力した文字列を
            // $inputTextに格納する
            TextEditor(text: $inputText)
                .font(.body) // フォント
                .foregroundColor(Color.green) // 文字の色
                .multilineTextAlignment(.trailing) //テキストの配置
                .lineSpacing(30) // 行間
                .border(.black, width: 3) // 境界線の色と幅
                .frame(width: 300, height:250)  // テキストエディタのサイズ
                .cornerRadius(3) // 境界線の丸み
                .colorMultiply(.orange.opacity(0.3)) // 背景色
        }
    }
}

struct TextEditorSample_Previews: PreviewProvider {
    // PreviewProviderから渡すプロパティには@Stateとstaticを付与する
    @State static var preview = ""
    static var previews: some View {
        TextEditorSample(inputText: $preview)
    }
}

これで、Bindingを付与したプロパティを使用していてもプレビュー機能を活用することができます。

タイトルとURLをコピーしました