換算 App- 貓主子熱量

這次的主題一樣跟貓貓有關,用輸入體重以及貓貓的活動狀態來預估貓貓一天所需的熱量,讓奴才們可以更知道要餵食多少的食物~

拆解一下開發步驟:

  1. 主題發想
  2. 在Storyboard中拉出Outlet
  3. 思考貓咪活動pickerView資料結構
  4. 建立pickerView delegate、dataSource
  5. 熱量計算公式func
  6. 輸入框以及pickerView異動時計算熱量並顯示結果

拉出Outlet,以及畫面關聯

資料結構

// 定義貓咪活動狀態及其對應的活動係數
let activityType: [String: Double] = ["4個月以下幼貓": 2.5, "4個月~1歲": 2, "已結紮成貓": 1.2, "未結紮成貓(1~7歲)": 1.4, "中年成貓(7~11歲)": 1.1, "老貓(11歲以上)": 1.1, "肥胖貓": 0.8, "久坐不動的成貓": 1 ,"過瘦成貓": 1.2, "懷孕的貓": 1.6, "哺乳的貓": 2, "生病成貓": 1]

pickerView

extension ViewController: UIPickerViewDataSource, UIPickerViewDelegate {

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// 當選擇行數發生改變時,更新結果
updateResult()
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
// UIPickerView 中的列數
return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
// UIPickerView 中選項數
return activityType.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
// pickerView中選項顯示
return Array(activityType.keys)[row]
}
}

顯示熱量計算結果

計算前要先檢查計算參數(體重、活動狀態)的值是否有異常

func updateResult() {
// 檢查體重輸入框是否包含有效的數值
guard let weightText = weight.text, let weightValue = Double(weightText) else {
result.text = "請輸入有效的體重"
result.textColor = .red
return
}

// 獲取選擇的活動係數
guard let selectedActivity = getSelectedActivity() else {
result.text = "請選擇活動狀態"
result.textColor = .red
return
}

// 計算貓咪所需熱量並更新結果標籤
let caloricNeeds = countCal(weight: weightValue, activity: selectedActivity)
result.text = "\(String(caloricNeeds)) kcal"
result.textColor = .brown
}

因為有使用到輸入框,這裡加入了點選空白處來收起鍵盤

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
// 點擊畫面空白處,收起鍵盤
view.endEditing(true)
}

DEMO

Github網址:https://github.com/cindy0344112/fatCat

--

--