首页 > 解决方案 > 如何在 SwiftUI/Swift 中设置自定义随机范围

问题描述

我需要在 SwiftUI(或 Swift)中为随机 int 创建一个自定义范围。

现在我有两个自定义整数(minValue 和 maxValue,我将使用 TextField 设置它们)。所以 mainNum 需要由它们来划分。我以为这会起作用,但没有

@State var minValue: Int = 0
@State var maxValue: Int = 100
@State var mainNum: Int = Int.random(in: minValue...maxValue)

标签: iosswiftrandomswiftui

解决方案


你不能那样使用Int.random(in:),因为self不可用。相反,您应该从init传入范围的位置创建初始随机数 - 或者您可以通过将其更改为以下方式在初始化程序中创建默认范围:

init(range: ClosedRange<Int> = 0 ... 100) {
    /* ... */
}

这是一个如何执行此操作的示例,其中随机数在您选择时更新(在这种情况下,按下按钮)。

struct ContentView: View {
    var body: some View {
        RandomNumberView(range: 0 ... 100)
    }
}
struct RandomNumberView: View {
    @State var range: ClosedRange<Int>
    @State var randomNumber: Int

    init(range: ClosedRange<Int>) {
        self.range = range
        randomNumber = .random(in: range)
    }

    var body: some View {
        List {
            Text("Random number: \(randomNumber)")

            Stepper(
                "Minimum: \(range.lowerBound)",
                value: Binding<Int>(
                    get: { range.lowerBound },
                    set: { range = $0 ... range.upperBound }
                ),
                in: 0 ... range.upperBound
            )

            Stepper(
                "Maximum: \(range.upperBound)",
                value: Binding<Int>(
                    get: { range.upperBound },
                    set: { range = range.lowerBound ... $0 }
                ),
                in: range.lowerBound ... 100
            )

            Button("Randomize") {
                randomNumber = .random(in: range)
            }
        }
    }
}

结果:

结果


推荐阅读