如何使用SwiftUI绑定创建var?

时间:2019-08-27 14:30:36

标签: swiftui

我以带有两个绑定的SwiftUI为例。我想从这两个绑定中创建一个范围。

@Binding var lowerBound:Double
@Binding var upperBound:Double

现在,我要使用范围初始化滑块。所以我认为这会起作用:

var range = lowerBound...upperBound

但是这去哪儿了?如果我把它放在下面

var body: some View {
        var range = lowerBound...upperBound

我收到此错误:

Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type

如何从绑定中创建变量?

3 个答案:

答案 0 :(得分:0)

我刚接触SwiftUI。我的问题是必须显式声明一个返回视图。不能将逻辑与视图混淆。如果是这样,则必须声明要返回的视图。那是导致我的编译错误。

答案 1 :(得分:0)

要使用SwiftUI初始化滑块,则不需要范围。请参见以下示例:

struct ContentView: View {
    @State private var sliderValue: Double = 200
    @State private var lowerBound: Double = 10
    @State private var upperBound: Double = 1000

    var body: some View {
        CustomButton(sliderValue: $sliderValue, lowerBound: lowerBound, upperBound: upperBound)
    }
}

struct CustomButton: View {
    @Binding var sliderValue: Double
    var lowerBound: Double
    var upperBound: Double

    var body: some View {
        Slider(value: $sliderValue, from: lowerBound, through: upperBound, by: 10)
        .padding()        
    }
 }

基于SwiftUI滑块文档初始化滑块,您需要遵循以下签名:

public init(值:绑定,从最小值:V = 0.0,到最大值:V = 1.0,onEditingChanged:@转义(布尔)->无效= {_}),其中V:BinaryFloatingPoint,V.Stride:BinaryFloatingPoint

  • value:“ minValue ... maxValue
  • 中的选定值
  • minValue:有效值范围的开始。默认值 到0.0

  • maxValue:有效值范围的结尾。默认为1.0

您会看到第一个参数是绑定,而minValue和maxValue没有绑定。

答案 2 :(得分:0)

我从中学到了很多。在初始化和回调中必须同时使用@State和@Environment对象。

这是我的SQL Generator示例,它全部基于此示例。它使用带有选择器和滑块的绑定!

https://github.com/jimijon/SwiftUI-SQL-ExpMaker