2017-02-11 1 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

은 어쩌면 문제는이 부분에 두 개의 공간이

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

내가 공간 아무것도하지만이 변경 제거했는데, 내가 정규식을 사용 어떻게, 미안, 엑스 코드에 새로운 메신저 대단히 감사합니다. –

+0

놀이터에서 예제를 추가하고 완벽하게 작동합니다. '정규식 '에 대해 배우려면 https://regexone.com – mhergon

0

Mhergon의 결과는 우측이다. 문제는 답을 검증하는 함수입니다. 코드 구조와 응답을 계산하고 받아들이는 방식이 올바른 방법이 아닙니다. 그러나 선발 투수에게 좋을 것 같습니다. 어쨌든 ValidatePassword 코드를 살펴보십시오.

Xcode의 PlayGround에서 코드를 시험해보십시오.

사용자 코드에서 촬영 한이 예를 살펴 보자, 단지 다른 변수 :

let x = 3 
let y = 4 

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

이제 "(3 * 4)"

를 인쇄이에 인쇄를 변경 :

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

그것은 지금 올바른 계산과 대답을 인쇄합니다().

편집

당신은 잘못된 질문에 대답하고 있습니다. 임의의 숫자를 사용자에게 인쇄하기 전에 생성하십시오.

내가 만든이 샘플을 확인할 수 있습니다. 더 짧은 코드도 확인하십시오. 이 기사에 저를 연결하거나 튜토리얼 아니면 그냥 내가 될 날 여기 말할 수있는 경우 :

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

+0

을 사용할 수 있습니다. 코드를 변경해도 코드를 변경해 보았습니다. 아무런 차이가 없다고 생각했는데, 다른 것이있을 수도 있다고 생각하십니까? –

+0

빠른 팁, 디버깅하는 방법을 알고 있습니까? 'textFieldDidChange'의'if-else'와'ValidatePassword'의'if'에 중단 점 *을 넣으십시오. 그런 다음'po textField.text!'. 그렇게하면 변수의 값과 변경 방법을 손쉽게 확인할 수 있습니다. – Glenn

+0

정말 인스턴트 메신저, 누군가가 코드를 테스트하고 텍스트 필드가 변수를 받아 들일 수 있도록 변경해야 할 것을 볼 수 있습니다, 그것은 처음지만 그 후에 나던 그다지 작동합니다. –

관련 문제