如何向用户刷新问题



我目前正在Swift UI中完成100天的代码,我想我已经完成了第25天的挑战。然而,我的大脑现在是粉红色的糊状物,我被难住了。

我正在尝试刷新(或重新绘制(两个Text视图,这两个视图向用户提供了两条信息。我曾想过打乱(.shuffled(((岩石、纸张、剪刀数组,但作为我的if语句,它使用的数组位置会使我的逻辑在接下来的几轮中无效。

因此,当用户解除警报时,我试图将Int.random(Int..Int(重写为变量aiChooses和playerShould,但我遇到了各种问题。

非常感谢任何帮助/想法。

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)

最新更新