如何解决我如何向用户刷新问题?
我目前正在Swift UI中处理100天的代码,我想我在第25天的挑战中完成了99%。但是,我的大脑现在变成了粉红色糊状的东西,我很沮丧。
我正在尝试刷新(或重绘)两个“文本”视图,这些视图为用户提供了两条信息。我曾考虑过改组(.shuffled())石头,纸张,剪刀数组,但是我的if语句使用的数组位置会使我的逻辑在接下来的回合中无效。
所以我试图将Int.random(int ... int)重写为变量aiChooses和playerS,当用户关闭警报时,但是我遇到了各种各样的问题。
非常感谢任何帮助/想法。
import SwiftUI
struct ContentView: View {
let rockPaperScissors = ["Rock","Paper","Scissors"]
let winLose = ["Win","Lose"]
var aiChooses = Int.random(in: 0...2)//<-- trying to update when user dismisses alert
var playerShould = Int.random(in: 0...1)//<-- trying to update when user dismisses alert
@State private var userAnswer = 0
@State private var alertVisible = false
@State private var score = 0
@State private var scoreTitle = ""
@State private var moreInfo = ""
var body: some View {
VStack {
Spacer()
Text("I choose \(rockPaperScissors[aiChooses])") //<-- Trying to get this to pull in a new value when alert dismissed
Text("You should \(winLose[playerShould])") //<-- Trying to get this to pull in a new value when alert dismissed
Spacer()
HStack {
Spacer()
Section {
Button(action: {
// your action here
self.playerTapped(playerChose: 0,winning: self.playerShould)
}) {
Text("Rock")
}
Spacer()
Button(action: {
// your action here
self.playerTapped(playerChose: 1,winning: self.playerShould)
}) {
Text("Paper")
}
Spacer()
Button(action: {
// your action here
self.playerTapped(playerChose: 2,winning: self.playerShould)
}) {
Text("Scissors")
}
Spacer()
}
.alert(isPresented: $alertVisible) {
Alert(title: Text(scoreTitle),message: Text(moreInfo),dismissButton: .default(Text("Ok")) {
self.nextRound() //<--- call func (below) to refresh starting question
})
}
}
// Picker("Choose Win or Lose",selection: $userAnswer){
// ForEach(0..<rockPaperScissors.count){
// Text(self.rockPaperScissors[$0])
// }
// }
// .pickerStyle(SegmentedPickerStyle())
Spacer()
Text("Score: \(score)")
}
}
func playerTapped(playerChose: Int,winning: Int) {
let aiChose = aiChooses
let rock = 0
let paper = 1
let scissors = 2
if winning == 0 {
if playerChose == aiChose {
// score == score
scoreTitle = "Draw!"
moreInfo = "You seleted the same as me!"
}
else if playerChose == rock && aiChose == paper {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You seleted Rock,I picked Paper!"
}
else if playerChose == rock && aiChose == scissors {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You seleted Rock,I picked Scissors!"
}
else if playerChose == paper && aiChose == scissors {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You seleted Paper,I picked Scissors!"
}
else if playerChose == paper && aiChose == rock {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected Paper,I selected Rock!"
}
else if playerChose == scissors && aiChose == paper {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You seleted Scissors,I picked Paper!"
}
else if playerChose == scissors && aiChose == rock {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You selected Scissors,I selected Rock!"
}
// trying to lose
else if winning == 1 {
if playerChose == aiChose {
// score == score
scoreTitle = "DRAW!"
moreInfo = "You seleted the same as me!"
}
else if playerChose == rock && aiChose == paper {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected the wrong answer,which is RIGHT!"
}
else if playerChose == rock && aiChose == scissors {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected the wrong answer,which is RIGHT!"
}
else if playerChose == paper && aiChose == scissors {
score += 1
scoreTitle = "CORRECT"
moreInfo = "You selected the wrong answer,which is RIGHT!"
}
else if playerChose == paper && aiChose == rock {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You selected the right answer,which is WRONG!"
}
else if playerChose == scissors && aiChose == paper {
score += 1
scoreTitle = "CORRECT"
moreInfo = "You selected the wrong answer,which is RIGHT!"
}
else if playerChose == scissors && aiChose == rock {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected the wrong answer,which is RIGHT!"
}
}
}
alertVisible = true
}
func nextRound() { // <-- when alert is dismissed,update vars for top two text views to update
aiChooses = Int.random(in: 0...2)
playerShould = Int.random(in: 0...1)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
解决方法
如果您希望SwiftUI在属性更改时更新/重绘视图,则需要将其设置为@State
属性:
@State var aiChooses = Int.random(in: 0...2)
@State var playerShould = Int.random(in: 0...1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。