일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 한글입력 안됨
- 블록 스코프
- SwiftUI 기반의 iOS 프로그래밍
- 한글입력 오류
- 제이쿼리연결
- max MySQL
- 제이펍 출판
- 맥 아파치
- 생활코딩
- 자바스크립트 객체
- 황반석 옮김
- 배열 분해 할당
- 자바스크립트 배열 할당
- 한글잘림
- 비주얼스튜디오 코드
- max apache
- 한글입력 잘림
- python GUI 사용하기
- 자바스크립트 class
- 맥 mysql
- 객체
- python tkinter 인터페이스
- 자바스크립트 객체 만들기
- jquery 사용하기
- 닐 스미스 지음
- 자바스크립트
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 기획자랑 사이좋게 지내고 싶다
- 객체지향
- 한글입력 씹힘
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 한글입력 안됨
- 블록 스코프
- SwiftUI 기반의 iOS 프로그래밍
- 한글입력 오류
- 제이쿼리연결
- max MySQL
- 제이펍 출판
- 맥 아파치
- 생활코딩
- 자바스크립트 객체
- 황반석 옮김
- 배열 분해 할당
- 자바스크립트 배열 할당
- 한글잘림
- 비주얼스튜디오 코드
- max apache
- 한글입력 잘림
- python GUI 사용하기
- 자바스크립트 class
- 맥 mysql
- 객체
- python tkinter 인터페이스
- 자바스크립트 객체 만들기
- jquery 사용하기
- 닐 스미스 지음
- 자바스크립트
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 기획자랑 사이좋게 지내고 싶다
- 객체지향
- 한글입력 씹힘
Archives
- Today
- Total
java,javascript,android,php,sql,공부용,메모용
계산기앱 기본적인 계산 / 프로퍼티에 값 저장/ 열거형 사용 본문
반응형
열거형
https://tog-code.tistory.com/99
Main.Storyboard 정렬에
UIStackView, Axis(방향), Distributton(뷰의 사이즈 분배), Alignment(정렬), Spacing(값에 따라 스택뷰 간격 조정)
IBInspectable(커스텀 속성을 스토리보드에서 사용), IBDesignable(실시간으로 스토리보드에 적용됨)
"RoundButton"라는 UIButton 클래스를 만들어서 IBInspectable,IBDesignable을 사용함
관해서는 내용이 너무 길어서 정리하지 않고 바로 코드로
계산기 코드는 ViewController에서만 이루어졌다
주석참고
기억할 점은 값을 저장해서 다른곳에 또 대입해서 저장하고 연산을 하고 형변환 하는 과정을 기억하면 좋을듯함 기억 못하면 또 보면된다!
//
// ViewController.swift
// Calculator
//
// Created by yd on 2021/12/06.
//
import UIKit
// 열거형
enum Operation {
case Add
case Subtract
case Divide
case Multiply
case unKnown
}
class ViewController: UIViewController {
@IBOutlet weak var numberOutputLabel: UILabel!
// 계산기의 상태값 프로퍼티
var displayNumber = "" //numberOutputLabel 표시되는 숫자
var firstOperand = "" // 첫번째 피연산자 값/이전 계산값 저장하는 프로퍼티
var secondOperand = "" // 두번째 피연사자 값/새롭게 입력된 값을 저장함
var result = "" // 계산의 결과값 저장
var currentOperation : Operation = .unKnown // 연산자를 저장/ 현재 계산기에 어떤 연산자가 입력되었는지 알 수 있도록
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
// 숫자버튼
@IBAction func tapNumberButton(_ sender: UIButton) {
guard let numberValue = sender.title(for: .normal) else {return}
if self.displayNumber.count < 9 {
self.displayNumber += numberValue
self.numberOutputLabel.text = self.displayNumber
}
}
// ac 버튼
@IBAction func tapClearButton(_ sender: UIButton) {
self.displayNumber = ""
self.firstOperand = ""
self.secondOperand = ""
self.result = ""
self.currentOperation = .unKnown
self.numberOutputLabel.text = "0"
}
// . 버튼
@IBAction func tapDotButton(_ sender: UIButton) {
if self.displayNumber.count < 8, !self.displayNumber.contains(".") {// .이 포함되지 않으면
self.displayNumber += self.displayNumber.isEmpty ? "0." : "." // displayNumber가 비어있으면 "0." 추가되고 그렇지 않으면 "."
self.numberOutputLabel.text = self.displayNumber
}
}
@IBAction func tapDivideButton(_ sender: UIButton) { // ÷
self.Operation(.Divide)
}
@IBAction func tapMultiplyButton(_ sender: UIButton) { // ×
self.Operation(.Multiply)
}
@IBAction func tapSubtractButton(_ sender: UIButton) { // −
self.Operation(.Subtract)
}
@IBAction func tapAddButton(_ sender: UIButton) { // +
self.Operation(.Add)
}
@IBAction func tapEqualButton(_ sender: UIButton) { // =
self.Operation(self.currentOperation)
}
// 계산을 담당하는 함수
func Operation(_ operation: Operation) {
if self.currentOperation != .unKnown {
if !self.displayNumber.isEmpty { // 비어있지 않으면
self.secondOperand = self.displayNumber // 두번째 입렵받은값
self.displayNumber = "" // 결과값 선택 후 또 다시 초기화
// 인트를 더블로 형변환 / 첫번째 두번째 피연산자(숫자)를 더블형으로 변경
guard let firstOperand = Double(self.firstOperand) else { return }
guard let secondOperand = Double(self.secondOperand) else { return }
//currentOperation 의 프로퍼티 값에 따라서 연산하는 코드
switch self.currentOperation {
case .Add:
self.result = "\(firstOperand + secondOperand)"
case .Subtract:
self.result = "\(firstOperand - secondOperand)"
case .Divide:
self.result = "\(firstOperand / secondOperand)"
case .Multiply:
self.result = "\(firstOperand * secondOperand)"
default:
break
}
// 더블형으로 변환해서 소숫점 값이 0이면 int로 변환하여 표시
if let result = Double(self.result), result.truncatingRemainder(dividingBy: 1) == 0{
self.result = "\(Int(result))"
}
// 연산을 여러번 할 수 있기 때문에 연산의 계산 값을 첫번째 피연산자값에 다시저장
self.firstOperand = self.result
self.numberOutputLabel.text = self.result
} //end if !self.displayNumber.isEmpty { // 비어있지 않으면
// 함수 파라미터로 전달한 연산자값을 currentOperation 저장
self.currentOperation = operation
} else {
self.firstOperand = self.displayNumber // 번호 저장
self.currentOperation = operation // 선택한 연산자 저장
self.displayNumber = "" // 빈문자로 초기화 -> 이다음 숫자를 누르면 새숫자가 나오도록
}
}
}
반응형
'모바일 > SwiftUI ios 공부' 카테고리의 다른 글
테이블뷰 TableView / UITableView, UITableDataSource, UITableDelegate / Xcode SwiftUI (0) | 2021.12.10 |
---|---|
화면간 데이터전달 다시 정리하기.. / segue 화면전환 delegate 데이터전달 (0) | 2021.12.05 |
화면간 데이터 전달 / Xcode SwiftUI (0) | 2021.12.02 |
ViewController 생명주기,수명주기 ViewController Life Cycle 화면전환 / Xcode SwiftUI 앱맨들기 (0) | 2021.12.01 |
ViewController , 코드와 세그웨이 화면전환code, Segue로 화면전환 해보기 / Xcode SwiftUI 앱맨들기 (0) | 2021.12.01 |
Comments