2017-04-27 102 views
0

我幾乎是新的編程,我想學習Swift 3.0。布爾沒有正確返回

我一直在試圖寫我自己的井字遊戲,遊戲卻莫名其妙的布爾返回不起作用我想,當我檢查一個勝利者的方式......

的CheckWin()函數看起來像這樣:

func CheckWin() -> Bool { 
    if button1.titleLabel?.text == button2.titleLabel?.text && button2.titleLabel?.text == button3.titleLabel?.text && button1.titleLabel?.text != nil { 
     return true 
    } else { 
     return false 
    } 
//and so on... 

我的問題是,當我點擊一個按鈕它填補了按鈕帶有「X」或「O」事後我通過if語句 調用CheckWin()函數,但它集Labeltext以「贏得!」在NEXT時間之後,我點擊一個按鈕。而不是立即檢查它並將Labeltext設置爲「Won!」。

@IBAction func buttonClick(_ sender: UIButton) { 
    if sender.titleLabel?.text == nil { 
     if player % 2 == 0 { 
       sender.setTitle(playerx, for: UIControlState.normal) 
       player += 1 //Adds 1 to the variable player 
       turn += 1 //Adds 1 to the variable turn (to check later for a draw) 
     } else { 
       sender.setTitle(playero, for: UIControlState.normal) 
       player += 1 
       turn += 1 
     } 
    } 
    if CheckWin() { 
     label.text = "Won!" 
    } 
} 

我感謝任何幫助/提示!提前致謝!

(順便說一句,我知道這是不是一個好主意,爲每個按鈕創建一個出口,但一開始我只是想在我開始提高讓這件事的工作):)

+0

使用*調試器*設置一個斷點,單步執行代碼,檢查變量。該計劃在什麼時候沒有達到你期望的水平? –

+0

@MartinR當它進入if語句的時候CheckWin()會檢查button.titleLabels,但不知何故返回false,下一次我點擊一個按鈕它會再次檢查它並返回true,但是該代碼說它應該設置titleLabel爲「X」或「O」之前,對吧?我沒有得到它...在我看來,代碼應該是正確的 –

+0

'if button1.titleLabel?.text'上面插入了三條打印語句,例如'print(button1.titleLabel?.text)'等。他們在控制檯中顯示什麼? – Magnas

回答

0

你有:

if player%2==0 
{ 
    sender.setTitle(playerx, for: UIControlState.normal} 
    player += 1 //Adds 1 to the variable player 
    turn += 1 //Adds 1 to the variable turn (to check later for a draw) 
} 

}在第一行的末尾,而不是)那是錯誤還是你只是錯誤地複製你的代碼,你的問題?

此外,請確保按鈕類型是自定義,而不是系統。將其更改爲自定義將使默認的文本顏色變成白色,以便將其更改爲黑色或其他內容。

+0

對不起,這只是一個錯誤。在我的實際代碼中是正確的。 –

+0

是的,我想盡可能多,輕鬆完成。我確信錯誤歸結於'nil'空字符串不是零,它是'''',所以應該是你在if語句中測試一個空按鈕。 – Magnas