BMI앱 제작

초기 화면구성

이미지를 바로 drop 하지않고 Assets폴더에 따로 넣는 이유는 이미지를 바로 drop하면 해상도의 차이가 생겨서 이미지가 깨지지만 Assets폴더에 따로 넣어서 관리하면 이미지가 깨지지 않는다.

키와 몸무게의 수치를 입력해야 하기 때문에 문자를 사용할 일이 없으므로 키보드의 타입을Decimal pad로 설정하여 숫자로만 입력하게 제어하여 편리하게 입력하게 한다.

각 텍스트 필드에 아울렛 변수 연결과 변수 이름 설정 및 버튼의 액션 함수와 타입 설정을 간단하게 control + Drag&Drop으로 설정한다.

버튼이 눌렸을 때 작동할 함수에 대한 코드 작성 후 잘 작동 하는지 테스트

텍스트 필드에 아무 값도 입력하지 않았을 경우를 대비하여 사용자에게 입력하라고 보여주는 에러 문구 설정

값을 모두 정상적으로 입력했을 때의 모습

이 소스의 문제점은?

@IBAction func calcBmi(_ sender: UIButton) {
    let height = Double(txtHeight.text!)! //과제 
    let weight = Double(txtWeight.text!)! //과제
    print(height,weight)
    let bmi = weight/(height*height*0.0001)
    let shortenedBmi = String(format: "%.1f", bmi) 
    var body = ""
    if bmi >= 40 {
        body = "3단계 비만"
    } else if bmi >= 30 && bmi < 40 {
        body = "2단계 비만"
    } else if bmi >= 25 && bmi < 30 {
        body = "1단계 비만"
    } else if bmi >= 18.5 && bmi < 25 {
        body = "정상" 
    } else {
            body = "저체중" 
    }
    print("BMI:\(shortenedBmi), 판정:\(body)") 
}

만약 입력란에 숫자가 아닌 문자형으로 입력이 되어지면 nil 값으로 출력되어 앱이 동작 안할 수 있으므로 숫자만 입력하게 하는 조치가 필요하다.

과제 : 느낌표가 왜 이렇게 많아요?

let height = Double(txtHeight.text!)! //과제 
let weight = Double(txtWeight.text!)! //과제

string형인 "txtHeight.text, txtWeight.text "의 값을 Double형으로 바꿀 때 Optional형으로 나오는 것을 풀어주기 위해 !를 추가하여 강제 언래핑한다.

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글