Swift 3:在一个简单的计算器中四舍五入嵌入文本的结果
Swift 3: Rounding a result embedded in text in a simple calculator
我完全是 Swift 3 的新手,我唯一的经验是一些基本的 HTML 和 JavaScript 回到 Microsoft FrontPage、Facebook 等之前的日子
我正在尝试制作一个(相对)简单的计算器,它会做一些数学运算来计算我需要为患者提供多少液氧。
我遇到的两个问题是,如果有人将字段留空,应用程序就会崩溃。第二个是我希望结果保留一位小数。
我找到了有关空白字段和舍入的答案,但不是我的确切示例,而且我只是收到不知道如何修复的错误。
请记住,对任何以 "Why did you do..." 开头的问题的回答都是双重的:1) 因为我在网上看到了这样的例子,以及 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.
}
}
问题 #1:空白字段导致应用程序崩溃
这是因为您使用 !
:
强制展开可选值
let aText = PTLPM.text
let a = Float(aText!)
let PtReq = (a! + d!)
如果文本字段为空,或者 String
无法转换为 Float
,这将导致崩溃。
相反,通过安全地展开它们来检查值是否 nil
。一种方法是使用一些 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)
我完全是 Swift 3 的新手,我唯一的经验是一些基本的 HTML 和 JavaScript 回到 Microsoft FrontPage、Facebook 等之前的日子
我正在尝试制作一个(相对)简单的计算器,它会做一些数学运算来计算我需要为患者提供多少液氧。
我遇到的两个问题是,如果有人将字段留空,应用程序就会崩溃。第二个是我希望结果保留一位小数。
我找到了有关空白字段和舍入的答案,但不是我的确切示例,而且我只是收到不知道如何修复的错误。
请记住,对任何以 "Why did you do..." 开头的问题的回答都是双重的:1) 因为我在网上看到了这样的例子,以及 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.
}
}
问题 #1:空白字段导致应用程序崩溃
这是因为您使用 !
:
let aText = PTLPM.text
let a = Float(aText!)
let PtReq = (a! + d!)
如果文本字段为空,或者 String
无法转换为 Float
,这将导致崩溃。
相反,通过安全地展开它们来检查值是否 nil
。一种方法是使用一些 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)