2017-08-30 10 views
-3

私はswift3のプログラミングを学んでいますが、私の電卓のアプリケーションを実行した後にクラッシュします。以下のコードを確認してください。実行時にコードがクラッシュする

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet weak var aLabel: UILabel! 
    @IBOutlet weak var commmon_button: UIButton! 
    var a: Int? 
    var b: Int? 
    var sum: Int? 
    var val = "" 
    @IBOutlet weak var text_feild: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    @IBAction func clik_button(_ sender: UIButton) { 
     val=String(sender.tag) 
     text_feild.text = text_feild.text! + val 
    } 

    @IBAction func fn_addition(_ sender: UIButton) { 
     a = Int(text_feild.text!) 
    } 

    @IBAction func fn_answer(_ sender: UIButton) { 
     b = Int(text_feild.text!) 
     sum = a! + b! 
     a = 0 
     b = 0 
     text_feild.text = nil 
     text_feild.text = String(sum!) 
    } 

    override func viewDidDisappear(_ animated: Bool) { 
     super.viewDidDisappear(animated) 
    } 

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

実行時間の間に私がスレッド1ブレークポイント2.1

+0

いつでもクラッシュする可能性のある値をアンラッピングするようにした場合、ガードレットORを使用してください。 –

+0

クラッシュログを投稿しますか? –

+0

あなたは質問をする方法を学ぶ必要があります。エラーを発生させずにコードを提供するだけでは問題ありません。 –

答えて

0

を言ってfn_additionでクラッシュを取得していますが

var a = 0 
var b = 0 
var sum = 0  

以下のようにあなたの変数は、以下の方法を使用してメソッドを置き換えInitiliaze。

@IBAction func clik_button(_ sender: UIButton) { 

    guard let value = String(sender.tag), let text = text_feild.text 
      else { 
      return 
     } 
    text_feild.text = text + value 
} 

@IBAction func fn_addition(_ sender: UIButton) { 
    guard let aValue = Int(text_feild.text) 
     else{ 
      return 
      } 
    a = aValue 
} 

@IBAction func fn_answer(_ sender: UIButton) { 
     guard let bValue = Int(text_feild.text) 
       else{return} 
      b = bValue 
      sum = a + b 
      a = 0 
      b = 0 


    text_feild.text = "" 
    text_feild.text = String(sum) 
} 

提案:あなたは、Bの値を取るため、その合計結果を示すために同じテキストフィールドを使用しています。 aとbの値を別々に取るには、2つの異なるテキストフィールドを使用する方がよいでしょう。合計値を表示するラベルを取る。

+0

あなたのコードに改良がまだありますが、 "text_feild.text!"アンラップしてクラッシュする可能性があります –

関連する問題