2017-01-02 4 views
1

私はスウィフト3に全く新しい、バックなどのMicrosoft FrontPageのは、Facebook、前の日におけるいくつかの基本的なHTMLとJavaScriptをされ、私の唯一の経験スウィフト3:シンプルな電卓のテキストに埋め込まれた結果を丸め

I患者に必要な液体酸素の量を計算するための数学を行う(比較的)簡単な電卓を作ろうとしています。

私が抱えている2つの問題は、誰かがフィールドを空白にしておくと、アプリケーションがクラッシュすることです。もう一つは、結果を小数点以下の桁に移動したいということです。

空白のフィールドと四捨五入に関する回答が見つかりましたが、私の正確な例ではありません。私は修正方法がわからないというエラーが出ます。

「なぜあなたはやったのですか」から始まる質問には、1)Web上の例を見たので、2)私には何もありません私がやっているアイデア

コードは以下のとおりです。

// 
// ViewController.swift 
// AECalc 
// 
// Created by Marco Metzler on 12/31/16. 
// Copyright © 2016 Metzler. All rights reserved. 
// 

import UIKit 
import Foundation 

class ViewController: UIViewController { 

@IBOutlet weak var PTLPM: UITextField! 
@IBOutlet weak var LTVVents: UITextField! 
@IBOutlet weak var Vents: UITextField! 
@IBOutlet weak var EmergLPM: UITextField! 
@IBOutlet weak var Ground: UITextField! 
@IBOutlet weak var Flight: UITextField! 
@IBOutlet weak var LOX: UILabel! 



@IBAction func Calculate(_ sender: UIButton) { 
    let aText = PTLPM.text 
    let bText = LTVVents.text 
    let cText = Vents.text 
    let dText = EmergLPM.text 
    let eText = Ground.text 
    let fText = Flight.text 
    let a = Float(aText!) 
    let b = Float(bText!) 
    let c = Float(cText!) 
    let d = Float(dText!) 
    let e = Float(eText!) 
    let f = Float(fText!) 
    let PtReq = (a! + d!) 
    let LTVTot = (b! * 20) 
    let VTot = (c! * 15) 
    let VentTot = (LTVTot + VTot) 
    let AllOx = ((VentTot + PtReq) * 60) 
    let TotTime = (e! + f!) 
    let answer = ((AllOx * TotTime)/804) 

    LOX.text = "LOX required: \(answer) liters." 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    //The code below hides the keypad when you tap blank space on the screen. I would prefer to have a "done" button on the keypad. 

    self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:)))) 


} 

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

} 
+0

フィールドが空白の場合、何が起こるしたいですか?フィールドが浮動小数点に変換されない場合は、何をしますか?デフォルトを使用しますか?エラーを出力しますか? – vacawama

+3

この質問はあまりにも広すぎます。 「私が抱えている2つの問題は、誰かがフィールドを空白のままにしておくと、アプリケーションがクラッシュし、2番目は小数点以下1桁に移動したいということです。あなたはアプリ全体を投げて「Fix this」と言っているだけです。あなたのコードの_precise_ポイントで_one_問題を選んで、あなたが何をしているのか、何をしたいのか、そして何が起こるのかを言う。 – matt

+0

空白のフィールドと四捨五入に関する回答が見つかりましたが、エラーが発生すると述べました。それらのエラーを投稿して、あなたが試したことが分かり、働きませんでしたし、そこからあなたを導くことができますか? – Bek

答えて

1

問題#1:これはテキスト場合は、クラッシュの原因となります

let aText = PTLPM.text 
let a = Float(aText!) 
let PtReq = (a! + d!) 

:空白は、あなたが!で、オプションの値をアンラップ力であるため、これは

アプリのクラッシュを引き起こしますフィールドが空の場合、StringFloatに変換できません。

値がnilであるかどうかを安全にアンラップして確認してください。これを行う方法の1つは、guard文です。

guard let aText = PTLPM.text else { 
    // handle case where text is nil here 
} 

guard let a = Float(aText) else { 
    // handle case where the text is not a valid Float here 
} 

これにより、続行する前に変数が実際の値であることが保証されます。

問題#2:

これを丸めは単に形式で取るStringコンストラクタの使用を必要とします。

LOX.text = String(format: "%.1f", answer) 
+0

ありがとう...私はこれらの提案の両方を試してみます。知らせます... – Marco

+0

こんにちはnathan ...助けてくれてありがとう。 LOX.text =文字列(形式: "%1f"、 "LOX required:\(answer)liters。")アプリケーションは実行され、noを指定します。エラーはありますが、フィールドに何を入力しても、常に0.0が返されます。だから、四捨五入はちょうど私が好きなように動作します(ありがとう!)、それは計算を壊しました。何か案は? – Marco

+0

文字列コンストラクタの2番目の引数は文字列ではなく数値でなければなりません。これを試してください: 'LOX.text = String(形式:"%.1f "、答え)' – nathan

関連する問題