SwiftUI How to instantiate PreviewProvider when View requires @Binding in initializer

前端 未结 3 503
春和景丽
春和景丽 2021-01-07 23:17

With SwiftUI (Xcode 11.1), I\'ve got some Views set up with 2-way bindings (using @Binding). Two-way updating works great.

However, how can I insta

3条回答
  •  臣服心动
    2021-01-07 23:45

    If you only need a constant value, use .constant(VALUE):

    struct YourView_Previews: PreviewProvider {
    
        static var previews: some View {
            YourView(yourBindingVar: .constant(true))
        }
    
    }
    

    If you need a value that can be changed in the live preview, I like to use this helper class:

    struct BindingProvider: View {
    
        @State private var state: StateT
        private var content: (_ binding: Binding) -> Content
    
        init(_ initialState: StateT, @ViewBuilder content: @escaping (_ binding: Binding) -> Content) {
            self.content = content
            self._state = State(initialValue: initialState)
        }
    
        var body: some View {
            self.content($state)
        }
    }
    

    Use it like so:

    struct YourView_Previews: PreviewProvider {
    
        static var previews: some View {
            BindingProvider(false) { binding in
                YourView(yourBindingVar: binding)
            }
        }
    
    }
    

    This allows you to test changing the binding in the live preview.

提交回复
热议问题