본문 바로가기
IT/swift

100 days of SwiftUI - Day19

by 가능성1g 2024. 11. 17.
반응형

19일차는 과제 데이 다!

저번 뿜빠이 프로그램을 베이스로 하여 단위 변환툴을 만드는 것이다. 

난 온도와 길이 변환 툴을 만들어따!

//
//  ContentView.swift
//  Changer
//
//  Created by HanTJ on 11/17/24.
//

import SwiftUI

struct ContentView: View {
    @State private var selectedTemperture: String = "섭씨"
    @State private var inputTempeture:Double = 0
    let tempertures = ["섭씨", "화씨", "켈빈"]
    var calculateTemperture:Double {
        switch selectedTemperture {
        case "섭씨":
            return inputTempeture
        case "화씨":
            return (inputTempeture*9/5) + 32
        case "켈빈":
            return inputTempeture + 273.15
        default:
            return -1
        }
    }
    
    @State private var selectedLengthUnit: String = "미터"
    @State private var inputLength:Double = 0
    //enum으로 선언해서 관리하는게 나을듯!!
    let lengthUnits = ["미터", "킬로미터", "피트", "야드", "마일"]
    var calculateLength:Double {
        //Measure 클래스를 이용해서 변형도 가능!
        let heightMeter = Measurement(value: inputLength, unit: UnitLength.meters)
        let heightKiloMeter = heightMeter.converted(to: UnitLength.kilometers)
        let heightFeet = heightMeter.converted(to: UnitLength.feet)
        let heightyard = heightMeter.converted(to: UnitLength.yards)
        let heightmile = heightMeter.converted(to: UnitLength.miles)
        print("\(heightKiloMeter) \(heightFeet) \(heightyard) \(heightmile)")
        
        switch selectedLengthUnit {
        case "미터":
            return inputLength
        case "킬로미터":
            return inputLength/1000
        case "피트":
            return inputLength*3.281
        case "야드":
            return inputLength*1.094
        case "마일":
            return inputLength/1609
        default:
            return -1
        }
    }
    

    
    var body: some View {
        NavigationStack {
            Form {
                Section("섭씨로 입력하세요") {
                    TextField("온도 입력", value: $inputTempeture, format: .number)
                    Picker("단위 선택", selection: $selectedTemperture) {
                        ForEach(tempertures, id: \.self) {
                            Text($0)
                        }
                    }
                    Text("\(selectedTemperture): \(calculateTemperture)")
                }.navigationBarTitle("온도변환")
                
                Section("미터로 입력하세요") {
                    TextField("길이 입력", value: $inputLength, format: .number)
                    Picker("단위 선택", selection: $selectedLengthUnit) {
                        ForEach(lengthUnits, id: \.self) {
                            Text($0)
                        }
                    }
                    Text("\(selectedLengthUnit): \(calculateLength)")
                }.navigationTitle("길이변환") //NavigationStack 내에서는 첫번째 선언한거만 된다!
            }
        }
    }
}

#Preview {
    ContentView()
}

릴리즈는 아니고 공부가 목적이니, 리팩토링이나 개선 부분은 주석으로만 남겨봤다!

반응형