SwiftUI 如何给 Slider 一个最小值和最大值并在文本中显示它的值?

SwiftUI how do I give a Slider a minimum and maximum value and display its value in a Text?

import SwiftUI

struct ContentView : View {
    var body: some View {
        PasswordGeneratorSettings(settingsConfiguration: PasswordGeneratorSettings.Settings.init(passwordLength: 20))
    }
}


struct PasswordGeneratorSettings : View {
    @State var settingsConfiguration: Settings
    struct Settings {
        var passwordLength = UInt()
    }
    var body: some View {
        NavigationView {
            List {
                Slider(value: $settingsConfiguration.passwordLength) { pressed in
                    Text("Password Length: \(settingsConfiguration.passwordLength)")
                }
                }.navigationBarTitle(Text("Settings"))
        }
    }
}

所以我正在制作一个密码生成器,我想从一个最小长度为 1,最大长度为 512 的滑块开始,并带有一个标签显示它的值(作为整数),但这就是我的全部只需要尝试在表格视图(列表)的左侧使用更新标签,在右侧使用滑块,但这甚至无法编译。

太久没读: 我正在尝试:

  1. 了解如何使用滑块设置最小值和最大值

  2. 在表格视图单元格的左侧有一个带有滑块值(整数)的标签,滑块在右侧。

而且我想在没有 UIKit 的情况下仅使用 SwiftUI 来完成所有这些操作(如果需要,还可以结合使用)。

这是您使用滑块的方式:

import SwiftUI

struct ContentView : View {
    @State var length: Float = 20

    var body: some View {
        NavigationView {
            List {
                PasswordGeneratorSettings(length: $length)
            }.navigationBarTitle(Text("Settings"))
        }
    }
}


struct PasswordGeneratorSettings : View {
    @Binding var length: Float

    var body: some View {

        VStack(alignment: .leading) {
            Slider(value: $length, in: 1...512, step: 1)

            Text("Password Length: \(Int(length))")

        }
    }
}

您的代码无法编译,因为您需要在滑块值参数中使用双精度值。您可以使用以下代码实现您的要求。滑块采用三个参数值,from 和 through。用简单的语言来说,from 是 minValue,through 是 maxValue,并且在任何给定时间 "value" 将 return 滑块中的当前值。

struct PasswordGeneratorSettings : View {
    @State var settingsConfiguration: Settings
    struct Settings {
        var passwordLength: Double = 1.0
    }
    var body: some View {
        NavigationView {
            List {
                HStack {
                    Text("Password Length: \(Int(settingsConfiguration.passwordLength))")
                    Slider(value: $settingsConfiguration.passwordLength, from: 1, through: 512)
                }
                .padding()
            }.navigationBarTitle(Text("Settings"))
        }
    }
}