반응형
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()
}
릴리즈는 아니고 공부가 목적이니, 리팩토링이나 개선 부분은 주석으로만 남겨봤다!
반응형