ios - 模拟器冻结 | SwiftUI、XCode
问题描述
我的结果是模拟器冻结。
我的预期结果是程序添加随机数,直到当我按下“非七”按钮时出现 7。
我的目标是完成这个挑战: *构建一个带有一个列表和下面三个按钮的 UI。
当第一个按钮被点击时:
将一个随机整数(从 1 到 10)添加到列表中。如果您添加到列表中的整数不是 7,则继续将随机整数(从 1 到 10)添加到列表中,直到您将 7 添加到列表中。当点击第二个按钮时:
将列表中显示的所有整数加 1 当点击第三个按钮时:
清除列表中的所有数字。
这是节目录制的链接: https ://files.fm/f/t5trf3ww3
import SwiftUI
struct ContentView: View {
@State var numbers = [Int]()
var body: some View {
VStack {
List(numbers, id: \.self) { num in
Text(String(num))
}
HStack {
Button("Not Seven") {
var randNumber = 0
randNumber = Int.random(in: 0...10)
repeat{
numbers.append(randNumber)
}while randNumber != 7
}
Button("Add 1 to All") {
for index in 0...numbers.count - 1 {
numbers[index] += 1
}
}
Button("Delete") {
numbers.removeAll()
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView()
ContentView()
}
}
}
解决方案
你从来没有真正改变randNumber
你的循环。
Button("Not Seven") {
// You initialize the variable
var randNumber = 0
// You set it to a random Int
randNumber = Int.random(in: 0...10)
//Then you test forever if that random Int is 7. You have a 1 in 11 chance of an infinite loop, which is why the simulator hangs.
repeat{
numbers.append(randNumber)
}while randNumber != 7
}
将按钮更改为:
Button("Not Seven") {
// No need to set it to 0 and then change it to a random Int prior to the loop.
var randNumber = Int.random(in: 0...10)
repeat {
numbers.append(randNumber)
//Change randNumber here to be a different random number.
randNumber = Int.random(in: 0...10)
} while randNumber != 7
}
您可能会重新编写逻辑以不使用两个不同的 `randNumber = Int.random(in: 0...10)' 语句,但我已经喝完咖啡了,还没有考虑到这一点。
推荐阅读
- regex - 如何在颤振中添加',[]正则表达式特殊字符
- html - 将包装项目放在网格的中心
- amazon-cloudformation - 如何在 AWS CloudFormation 中强制删除堆栈及其所有信息?
- kubernetes - 如何使用 kubernetes python sdk 重新部署部署
- java - golang 中密钥长度为 15360 的 RSA 密钥对生成速度太慢。需要做些什么来解决这个问题?
- php - 为什么我的 var_dump 数据返回四次?
- asp.net - 有没有办法阻止来自另一台服务器的查询?
- python - 神经网络:这种情况下参数更新的顺序是什么?
- javascript - 使用 jquery 或更好的替代方法下载大记录
- exception - Liberty 服务器:在非事务会话上调用“提交”方法无效