2017-02-11 27 views
0

Xcodeで2つの数字を乗算してテキストフィールドに入力して、答えが正しい場合は灰色のボタンが表示されます青に変わります。UITextField入力が機能しない

問題は、私が答えを確認しても動作しない場合でも、ボタンは灰色になり、アプリは答えが間違っていると思うので、誰でも助けてください私のコードで何が問題なのですか?

var firstNumber = arc4random() 
    var secondNumber = arc4random() 
    @IBOutlet weak var AnswerButton: UIButton! 
    @IBOutlet weak var OutcomeNumber: UILabel! 
    @IBOutlet weak var textField: UITextField! 


    @IBAction func textFieldEditingDidChange(_ sender: Any) { 
     print("textField: \(textField.text)") 
     if ValidatePassword(text: textField.text!) { 
      AnswerButton.isEnabled = true 
     } else { 
      AnswerButton.isEnabled = false 
     } 
    } 

    @IBAction func AnswerButtonPressed(_ sender: Any) { 
     print("you may enter") 

     view.backgroundColor = UIColor.green 
    } 

    func ValidatePassword(text: String) -> Bool { 
     var result = false 
     if text == ("(\(firstNumber*secondNumber))") { 
      result = true 
     } 
     return result 

    } 

    @IBAction func GObutton(_ sender: Any) { 
     OutcomeNumber.text = "\(firstNumber)×\(secondNumber)" 
     firstNumber = arc4random_uniform(10) 
     secondNumber = arc4random_uniform(10) 
    } 

    @IBAction func GoMedium(_ sender: Any) { 
     OutcomeNumber.text = "\(firstNumber)×\(secondNumber)" 
     firstNumber = arc4random_uniform(50) 
     secondNumber = arc4random_uniform(50) 
    } 

    @IBAction func GoHard(_ sender: Any) { 
     OutcomeNumber.text = "\(firstNumber)×\(secondNumber)" 
     firstNumber = arc4random_uniform(100) 
     secondNumber = arc4random_uniform(100) 
    } 


     override func viewDidLoad() { 
     super.viewDidLoad() 
     AnswerButton.isEnabled = false 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

答えて

2

はたぶん、問題は、この部分にある2つのスペースがある

func ValidatePassword(text: String) -> Bool { 
    var result = false 
    if text == "(\(firstNumber) * \(secondNumber))" { 
     result = true 
    } 
    return result 

} 

*\(secondNumber)。テキスト(1 * 3)をしようとすると、この関数はfalseを返しますが、一方(1 * 3)戻りtrue

で、これを評価するためにRegular Expressionsを使用するのが最適です。

Playground enter image description here

+0

私はスペースを削除しようとしたが、何も変わっていない、どのように私は正規表現を使用しない、申し訳ありませんが、Xcodeのに新しいイム非常に感謝しています –

+0

私は遊び場での例を追加し、完璧に動作します。 '正規表現'について学ぶためには、https://regexone.com – mhergon

0

Mhergonでの結果は右です。問題は、答えを検証する関数です。コード構造と答えを計算して受け入れる方法は、正しい方法ではありません。しかし、初心者には向いています。とにかく、あなたのValidatePasswordコードを見てください。

XcodeのPlayGroundでコードをお試しください。

あなたのコードから取られたこの例を見てみましょう、ちょうど異なる変数:

let x = 3 
let y = 4 

print("(\(x) * \(y))") 

"(3 * 4)"

を印刷し、これに印刷を変更します。

print("(\(x*y))") 

ことになりました正しい計算と回答を印刷します。です。

EDIT

あなたは間違った質問に答えるされています。乱数を生成してからユーザに出力してください。

このサンプルを確認することができます。より短いコードもチェックする。あなたは記事に私をリンクしたり、チュートリアルやちょうど私のようになり、ここで私に言うことができれば:)

https://github.com/glennposadas/TextFieldGame-iOS

+0

を使用することができます。私はあなたが示唆したものにコードを変更しようとしましたが、何か変更があるかもしれないと思いますか? –

+0

クイックヒント、デバッグ方法は分かりますか?あなたの 'textFieldDidChange'の' if-else'とあなたの 'ValidatePassword'の' if'にいくつかの*ブレークポイント*を入れてください。次に、 'po textField.text!'のような値を表示します。'。このようにして、変数の値とそれらがどのように変化しているかを簡単に1つ1つチェックすることができます。 – Glenn

+0

私は本当に混乱している、誰かがコードをテストし、テキストフィールドが変数を受け入れることができるように変更する必要があるかを見ることができます、それは初めてですが、その後、私はdoesntです。 –

関連する問題