결과
배운점
- 연관성이 있는 값을 모아놓은 원시값이 없는 열거형 Circulate 만들어 사용해봄
- truncatingRemainder 메서드 사용
other로 나눈 값의 나머지를 반환하는 메서드를 사용
UIStackView 사용
Axis - 스택뷰의 방향을 결정
Distribution - 옵션에 따라 View들의 사이즈를 분배
Alignment - 정렬
Spacing - 간격조정
IBInspectable
커스텀뷰 속성을 스토리보드에서 바로 변경할 수 있음
즉 인스펙터에 내가 원하는 Attribute를 추가 하고 싶을때 사용
Attribute는 get,set이 가능한 프로퍼티여야 함
IBDesignable
변경된 속성이 실시간으로 적용되는 것을 볼 수 있음
참고)
IB = Interface Builder - 스토리보드를 뜻함
장점
- Custom View를 만들때마다 실제 빌드를 돌려서 직접 확인하지 않아도 됨
- UI관련 내용을 스토리보드에서 깔끔하게 한번에 정의가능
단점
- 무분별하게 사용하면 느려짐
변수
pressedDB = 보여지는 문자열
firstDB = 첫 문자열를 담을 문자열
secondDB = 두번째 문자열을 담을 문자열
result = 결과를 나타낼 문자열
circulateDB는 Circulate 자료형을 가짐
//
// DuckCalculatorViewController.swift
// Calculator
//
// Created by duck on 2022/10/04.
//
import UIKit
enum Circulate{
case Add
case Minus
case Divide
case Multiply
case unknown
}
class DuckCalculatorViewController: UIViewController {
var pressedDB = ""
var firstDB = ""
var secondDB = ""
var result = ""
var circulateDB: Circulate = .unknown
//MARK: IBOutlet
@IBOutlet weak var resultLabel: UILabel!
//MARK: IBAction
@IBAction func clearButton(_ sender: UIButton) {
self.pressedDB = ""
self.firstDB = ""
self.secondDB = ""
self.result = ""
self.circulateDB = .unknown
self.resultLabel.text = "0"
}
@IBAction func addButton(_ sender: UIButton) {
self.circulate(.Add)
}
@IBAction func minusButton(_ sender: UIButton) {
self.circulate(.Minus)
}
@IBAction func multiplyButton(_ sender: UIButton) {
self.circulate(.Multiply)
}
@IBAction func divideButton(_ sender: UIButton) {
self.circulate(.Divide)
}
@IBAction func equalButton(_ sender: UIButton) {
self.circulate(self.circulateDB)
}
@IBAction func dotButton(_ sender: UIButton) {
if self.pressedDB.count < 8, !self.pressedDB.contains("."){
self.pressedDB += self.pressedDB.isEmpty ? "0." : "."
self.resultLabel.text = self.pressedDB
}
}
@IBAction func numberButton(_ sender: UIButton) {
guard let senderTitle = sender.title(for: .normal) else {return}
if pressedDB.count < 9{
self.pressedDB += senderTitle
self.resultLabel.text = pressedDB
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
func circulate(_ operation: Circulate){
if self.circulateDB != .unknown{
if !self.pressedDB.isEmpty{
self.secondDB = self.pressedDB
self.pressedDB = ""
guard let firstOperand = Double(self.firstDB) else {return}
guard let secondOperand = Double(self.secondDB) else {return}
switch self.circulateDB {
case .Add:
self.result = "\(firstOperand + secondOperand)"
case .Minus:
self.result = "\(firstOperand - secondOperand)"
case .Divide:
self.result = "\(firstOperand / secondOperand)"
case .Multiply:
self.result = "\(firstOperand * secondOperand)"
default:
break
}
if let result = Double(self.result),result.truncatingRemainder(dividingBy: 1) == 0{
self.result = "\(Int(result))"
}
self.firstDB = self.result
self.resultLabel.text = self.result
}
self.circulateDB = operation
}else{
self.firstDB = self.pressedDB
self.circulateDB = operation
self.pressedDB = ""
}
}
}
'프로젝트 만들어보기' 카테고리의 다른 글
[iOS] TodoList 만들기 2/3 (UserDefaults/didSelectRowAt) (2) | 2022.10.11 |
---|---|
[iOS] TodoList 만들기 1/3 (UIAlertController) (2) | 2022.10.09 |
[iOS] LED전광판 만들기 (ViewController끼리 데이터 전달하기 -Segue,Navigation Controller) (0) | 2022.10.04 |
[Swift] 명언생성기 (iOS) (0) | 2022.09.27 |
[Weather App] 날씨 앱 만들어보기 (SwiftUI) (0) | 2022.08.24 |