Swift入門第013天-身體質量指數(BMI)計算器
型別/Switch/IBOutlet/IBAction的應用
此次目標簡單扼要:寫一個BMI計算器
需要的UI:圖片顯示x1、文字輸入框x2、文字標籤x6
需要的圖片:初始圖片、標準圖片、過重圖片、過輕圖片
需要的公式:BMI公式 = 體重(kg) ÷ (身高(m))²
因為swift中的乘方公式x的y次方是pow(x, y),不能用x^y,需特別注意
額外加入的功能:在輸入字串時,點擊任意位置可關閉鍵盤
建好UI後,將需要讀取及寫入的UI以右鍵拉至程式區上方建立IBOutlet
class ViewController: UIViewController
{
@IBOutlet weak var bmiImageView: UIImageView!
@IBOutlet weak var height: UITextField!
@IBOutlet weak var weight: UITextField!
@IBOutlet weak var solBMI: UILabel!
@IBOutlet weak var bmiDescription: UILabel!
...
將需要觸發功能的「計算按鈕UI」以右鍵拉至程式區下方建立IBAction
override func viewDidLoad(){super.viewDidLoad()} @IBAction func calPressed(_ sender: Any) {}
接著是計算的部分,因為只有數字能計算,數字又有分為數種型別
所以在讀取文字輸入視窗的「字串」時,需要轉換為可計算的文字型別
例如Double()或Float()
BMI = Double(weight.text!)! / pow((Double(height.text!)! / 100), 2)
需特別注意的是weight.text / height.text都是optional的型別,所以需加上!來強制讀取
Double()同樣也是,所以也需加上!,變為Double()!,才能夠正常運作
更詳細的說明,請見彼得潘的文章:
再來是設定輸入字串為空字串或0的情形,以及計算出來BMI大小不同時,讓不同圖片顯示的if statement及switch statement
//當數字為0或沒有輸入時,跑出提示訊息並且不做運算
if weight.text == "" || weight.text == "0" || height.text == "" || height.text == "0"
{bmiDescription.text = "請輸入數字"}//排除以上狀況後,才開始以switch statement分為三種狀況
else
{let BMI = Double(weight.text!)! / pow((Double(height.text!)! / 100), 2)
solBMI.text = "BMI為 "+String(format: "%.1f", BMI)
switch BMI
{//BMI大於等於24,列為過重
case 24...:
bmiDescription.text = "過重,請控制飲食,加強肌力!"
bmiImageView.image = UIImage(named: "body-fat.jpg")//BMI小於等於18.5,列為過輕
case ...18.5:
bmiDescription.text = "過輕,請增加飲食!"
bmiImageView.image = UIImage(named: "body-food.jpg")//其它情況,列為標準
default:
bmiDescription.text = "標準,請繼續保持!"
bmiImageView.image = UIImage(named: "body-standard.png")
}
}
最後,再加上點擊鍵盤以外區域可以使鍵盤收回的Function
class ViewController: UIViewController
{
//按任意地方收鍵盤part1
func hideKeyboardWhenTappedAround()
{
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.dismissKeyboard))
view.addGestureRecognizer(tap)
}
//按任意地方收鍵盤part2
@objc func dismissKeyboard() {
view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()//按任意地方收鍵盤part3
self.hideKeyboardWhenTappedAround()
}
以上~大功告成~