ios - 如何在 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)
解决方案
你不能那样使用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)
}
}
}
}
结果:
推荐阅读
- html - 如何在angular4和html中拆分otp的输入框?
- excel-formula - Excel - 重叠数据 - 数据透视表
- r - 如何将 IP 地址存储在 R 中,然后对其进行处理以提供 IP 位置?
- php - Mysql pdo 等于小于大于日期的字符
- mysql - MySQL JOIN 获取不存在的行
- java - Springboot ssl 信任库属性不起作用
- php - 如何在 ESPOCRM tpl 文件中获取 URL 参数?
- angular - 在 Angular 5 中使用 ngFor 过滤表
- excel - Excel复制粘贴2行但只移动一行
- javascript - 我可以将通过 for 循环创建的无序列表转换为树视图吗