Besoin d'info UIButton

bonjour je vous partage un code que j ai dans mon application :

@IBAction func GamerChoice(_ sender: UIButton) {
    //On teste type de jeu
    if HumanVsMachine == false {
        CaseAJouer = sender.tag
        PositionJoueur = CaseAJouer - 1
        if Joueur1 {
            Board[PositionJoueur] = 1
            sender.setBackgroundImage(UIImage(named: "cross"), for: .normal)
            
        } else {
            Board[PositionJoueur] = -1
            sender.setBackgroundImage(UIImage(named: "Circle"), for: .normal)
        }
        
    } else if HumanVsMachine == true {
        if Joueur1 == true {
            CaseAJouer = sender.tag
            PositionJoueur = CaseAJouer - 1
            Board[PositionJoueur] = 1
            sender.setBackgroundImage(UIImage(named: "cross"), for: .normal)
            iswinner()
            Joueur1 = !Joueur1
            AffichageJoueurEnCours()
        } else if Joueur1 == false {
            //La machine doit jouer
            print("Machine Turn")
            MachineTurn()
            print(Board)
            sender.setBackgroundImage(UIImage(named: "Circle"), for: .normal)
            iswinner()
            Joueur1 = !Joueur1
            AffichageJoueurEnCours()
        }
    }
}

Lorsque c est le tour de la machine et que j appelle avec la fonction suivante :

GamerChoice(view.viewWithTag(CaseChoisie+1) as! UIButton)

le choix n est pas validé comme si il fallait quand même cliquer sur un des boutons.
alors qu en appelant GamerChoice() cela ne devrait pas déclencher le code de ce même bouton ?
si ce n est pas le cas comment puis je faire avez vous une idée ? j aimerais autant pouvoir appeler le code du bouton ca m évite d avoir a créer une fonction pour ce que doit faire la machine contre le joueur.

Le problème serait il que justement je sois en UIButton -> Est ce que du coup le UIButton oblige a passer par le clic sur le bouton pour que ca soit pris en compte ?

Salut,
Ta logique me parait bizarre. Pour moi, les boutons sont physiques, donc impossibles à une machine sans bras de l’actionner. Là, tu demandes à une machine sans bras d’appuyer sur un bouton. C’est comme faire un copier coller d’une fenêtre à l’autre en demandant à la machine de faire un drag and drop.

Certes, ça peut être possible de le faire comme tu le fais actuellement, mais je ne l’ai jamais fait ainsi.
Les fonctions précédées d’un @IBAction sont pour moi réservées à l’utilisateur.

Donc, je fais des fonctions que j’appelle à l’intérieur de la fonction @IBAction et dans ton cas et que je réserve ce type de fonction à l’utilisateur et que le code ce lis de haut en bas. Dans le mode HumainVsMachine je n’ai pas besoin de savoir qui joue vu que je peux lui dire la case jouée par l’utilisateur et donner la main tout de suite après à la machine.

oui effectivement je me suis peut être un peu tourner le cerveau dans tous les sens sans raison.

Comme le dit Anthony une IBAction ne peut fonctionner qu’en réponse à une action de l’utilisateur ! Je ne suis pas surpris que cela ne fonctionne pas avec un appel dans le code, même sans jamais avoir essayé (ni même d’avoir eu l’idée d’essayer …).