728x90
안녕하세요.
아래 예제 코드는 계산기를 구현한 예제입니다.
buttons 배열에는 계산기 버튼을 포함하고 있습니다.
@State 변수를 사용하여 현재 화면에 보여지는 값(display), 첫 번째 피연산자(operand1), 두 번째 피연산자(operand2), 연산자(operation), 그리고 화면 초기화 여부(clearDisplay)를 관리합니다.
handleButtonPress 함수는 사용자가 계산기 버튼을 눌렀을 때 호출되며, 입력한 버튼에 따라 @State 변수를 업데이트하고, 계산 결과를 표시합니다. calculate 함수는 피연산자와 연산자를 사용하여 계산 결과를 반환합니다.
위 예제 코드는 버튼에 따라 배경 색상이 다르게 나타나도록 구현되어 있습니다. 버튼의 배경 색상은 buttonBackground 함수에서 처리되며, switch 문을 사용하여 버튼의 종류에 따라 다른 색상을 반환합니다.
위 예제 코드를 실행하면 iOS에서 제공하는 기본 계산기와 유사한 UI가 나타납니다. 계산 결과는 화면 상단에 표시되며, 사용자가 버튼을 눌러 계산을 수행할 수 있습니다.
import SwiftUI
struct ContentView: View {
// 계산기 버튼 목록
let buttons = [
["7", "8", "9", "X"],
["4", "5", "6", "-"],
["1", "2", "3", "+"],
["C", "0", ".", "="]
]
// 현재 화면에 표시될 값
@State var display = "0"
// 첫 번째 피연산자
@State var operand1 = ""
// 두 번째 피연산자
@State var operand2 = ""
// 현재 선택된 연산자
@State var operation = ""
// 화면 초기화 여부
@State var clearDisplay = true
var body: some View {
VStack(spacing: 12) {
// 현재 화면에 표시될 값
Text(display)
.font(.largeTitle)
.fontWeight(.bold)
.lineLimit(1)
.padding(.trailing, 24)
.frame(maxWidth: .infinity, alignment: .trailing)
// 계산기 버튼 그리드
ForEach(buttons, id: \.self) { row in
HStack(spacing: 12) {
ForEach(row, id: \.self) { button in
Button(action: {
// 버튼 클릭 핸들러
handleButtonPress(button)
}, label: {
Text(button)
.font(.title)
.fontWeight(.semibold)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(buttonBackground(button))
.foregroundColor(.white)
.cornerRadius(10)
})
}
}
}
}
.padding(12)
}
// 버튼 배경 색상
func buttonBackground(_ button: String) -> Color {
switch button {
case "X", "-", "+", "=":
return Color.orange
case "C":
return Color.red
case ".":
return Color.gray
default:
return Color.blue
}
}
// 계산기 버튼 클릭 핸들러
func handleButtonPress(_ button: String) {
switch button {
case "C":
// "C" 버튼: 화면 초기화
display = "0"
operand1 = ""
operand2 = ""
operation = ""
clearDisplay = true
case "X", "-", "+":
// 연산자 버튼: 피연산자 설정
operation = button
operand1 = display
clearDisplay = true
case "=":
// "=" 버튼: 계산 수행
operand2 = display
let result = calculate()
display = result
operand1 = ""
operand2 = ""
operation = ""
clearDisplay = true
default:
// 숫자나 "." 버튼: 현재 값에 추가
if clearDisplay {
display = button
clearDisplay = false
} else {
display += button
}
}
}
// 계산 함수
func calculate() -> String {
// 피연산자와 연산자 추출
// 올바른 숫자 형식으로 변환하여 계산 수행
if let num1 = Double(operand1), let num2 = Double(operand2) {
switch operation {
case "X":
return String(num1 * num2)
case "-":
return String(num1 - num2)
case "+":
return String(num1 + num2)
default:
return "0"
}
} else {
// 올바른 숫자 형식이 아닌 경우 "0"으로 처리
return "0"
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
감사합니다.
'iOS' 카테고리의 다른 글
[iOS][SwiftUI] Todo 만들기 (0) | 2023.05.24 |
---|---|
[iOS][SwiftUI] 메모장 만들기 (0) | 2023.05.07 |
[iOS][Swift UI] List View 사용하기 (0) | 2023.04.04 |
[iOS][Swift UI] iPages (0) | 2023.03.22 |
[iOS][Swift UI] 뷰 강제닫기 (0) | 2023.03.07 |