#HW換算 App,BMI計算機

Drake
彼得潘的 Swift iOS / Flutter App 開發教室
4 min readAug 24, 2018

又到了寫作業的時間了,這次來嘗試做看看BMI計算機功能,本來是想把整個app做完,不過這次作業重點在if的判斷,就來稍微說明一下我是如何做BMi計算部分。

大概的架構

首頁有四顆Button分別會轉移到四個畫面,左上按了以後會跳到第一個畫面,然後第二個畫面一開始做的時候放上四元件兩個textfield輸入身高體重,一個button當計算用,一個label作顯示結果。

一樣拉好IBAction跟IBOutlet就可以開始寫程式了

運作的邏輯是這樣,使用者輸入身高跟體重,按下計算按鈕,顯示在label上所以在button裡面寫下計算的過程,要取得我們輸入的字串可以用.text這個方法,但我們點擊該物件及option會發現他的型別是一個optional,所以要做個optional binding 去解開才不會出錯,

確定解開後,因為使用者可能會故意輸入空字串,所以我再往下判斷不等於空字串

於是我寫了這樣

然後就報錯

因為型別關西會無法運算,於事我在做一層判斷轉換成Duoble型別,順利存進去後就可以做計算了

把計算後的結果存進label裡

然後編譯你會發現就可以順利計算了,但還是發現很多問題,比如說當晚成一次計算後,再清空格子,太麻煩了,然後如果只輸入其中一個,另一個是沒輸入,程式會完全不動好像壞掉,於是我做了以下修改。

編譯後有少一個輸入沒打得狀況

到這裡大致上感覺沒問題了,然後我就很犯賤的打了字進去,不出意外完全沒反應,繼續修改…

這樣一來就可以判斷到打字串進去會有反應

然後我在測試一下,每次計算完都要重新清空textfield,所以要將每個狀況都結束都要清空如下

大致上這樣感覺就可以完成了

最後做一點修改,我把巢狀if最外層改成另一個寫法,然後Label想讓他每次按下按鈕都有動畫

上面那個animateLabel()是我寫的另一個方法用來作label的動畫

動畫的控制因為我想讓文字每次都浮現出來,所以只控制透明度的部分

每次要執行label的動畫就呼叫方法

然後繼續測試會發現你用手機測試虛擬盤按下去return沒反應,鍵盤也下不去,查了一下resignFirstResponder()這個來解決,然後按下虛擬鍵盤要如同按下計算有反應的話要去服從UITextFieldDelegate這個協定

然後把文字輸入匡物件的delegate屬性指向自己

這樣return按下去後不知道執行什麼會去問.delegate這個屬性,然後要在寫這個方法去實作

結果如下

--

--

Drake
彼得潘的 Swift iOS / Flutter App 開發教室

2018/06/04 記錄自己前往成為開發者的道路,以及自己的學習筆記。