如何使用SwiftUI绑定创建变量?

如何使用SwiftUI绑定创建变量?,swiftui,Swiftui,我有一个带有两个绑定的SwiftUI作为示例。我想从这两个绑定创建一个范围 @Binding var lowerBound:Double @Binding var upperBound:Double 现在我想用一个范围初始化滑块。所以我认为这会起作用: var range = lowerBound...upperBound 但这是怎么回事?如果我把它放在下面 var body: some View { var range = lowerBound...upperBound

我有一个带有两个绑定的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

如何从绑定中生成变量?

我对SwiftUI是新手。我的问题是必须显式声明返回视图。人们不能把逻辑和观点混为一谈。如果是这样,则必须声明要返回的视图。这导致了我的编译错误

我刚接触SwiftUI。我的问题是必须显式声明返回视图。人们不能把逻辑和观点混为一谈。如果是这样,则必须声明要返回的视图。这导致了我的编译错误

要使用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 Slider文档要初始化滑块,您需要遵循以下签名:

public initvalue:Binding,从minValue:V=0.0到maxValue:V=1.0,onEditingChanged:@escaping Bool->Void={in},其中V:BinaryFloatingPoint,V.Stride:BinaryFloatingPoint

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

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


您可以看到第一个参数是绑定,minValue和maxValue不绑定。

要使用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 Slider文档要初始化滑块,您需要遵循以下签名:

public initvalue:Binding,从minValue:V=0.0到maxValue:V=1.0,onEditingChanged:@escaping Bool->Void={in},其中V:BinaryFloatingPoint,V.Stride:BinaryFloatingPoint

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

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


您可以看到第一个参数是绑定,minValue和maxValue不绑定。

我学到了很多。有必要在init和回调中同时使用@State和@Environment对象

SQL生成器就是基于这个示例的。它使用带有选择器和滑块的绑定


我从中学到了很多。有必要在init和回调中同时使用@State和@Environment对象

下面是我的SQL生成器示例,这一切都基于此。它使用带有选择器和滑块的绑定


您可以创建一个viewmodel,当设置lowerBound和UpperBound时,该viewmodel会创建var范围您的方法感觉。。。错误的首先,问题是您在某些视图之外而不是内部声明变量。第二,为什么不直接使用两个变量呢?SwiftUI滑块需要一个名为in的参数,这是您尝试执行的范围。我的SwiftUI滑块使用三个甚至四个ObserveObject变量,这些变量被设置为struct-min、max、default和soon-step的数组。听起来不刺耳,但听起来你还没有掌握一些快速界面的基本知识。顺便说一句,我没有投你反对票。你可以创建一个viewmodel,在设置lowerBound和UpperBound时创建var范围你的方法感觉。。。错误的首先,问题是您在某些视图之外而不是内部声明变量。第二,为什么不直接使用两个变量呢?SwiftUI滑块需要一个名为in的参数,这是您尝试执行的范围。我的SwiftUI滑块使用三个甚至四个ObserveObject变量,这些变量被设置为struct-min、max、default和soon-step的数组。听起来不刺耳,但听起来你还没有掌握一些快速界面的基本知识。顺便说一句,我没有否决你。你必须按设计使用属性包装,而不是在init中尝试使用它们。你必须按设计使用属性包装,而不是在init中尝试使用它们