如何向用户刷新问题?

How do I refresh the question to the user?

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

我正在尝试刷新(或重绘)向用户显示两条信息的两个文本视图。我考虑过洗牌 (.shuffled()) 石头剪刀布数组,但我相信我的 if 语句使用数组位置会使我的逻辑在接下来的几轮中无效。

所以我试图在用户关闭警报时将 Int.random(int...int) 重写为变量 aiChooses 和 playerShould,但我 运行 各种问题。

任何 help/ideas 非常感谢。

    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[[=10=]])
//                    }
//                }
//                .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 在 属性 改变时 update/redraw 一个视图,你需要把它变成 @State 属性:

@State var aiChooses = Int.random(in: 0...2)
@State var playerShould = Int.random(in: 0...1)