Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Carousel CollectionView
- UIKit
- UserDefaults
- TableView Section
- CarouselCollectionview
- CoreData
- Input Output
- class struct
- 테이블뷰 나누기
- Array vs Linked List
- ReferceCycle
- @escaping
- 양궁대회
- SWIFT
- coremotion
- 면접을 위한 CS전공 지식 노트
- 롤케이크 자르기
- wil
- 프로그래머스
- 자료구조
- firebase
- tableview section별 다른 cell적용
- Reference Cycle
- 면접을 위한 CS 전공 지식 노트 Tree
- NavigationSearchBar
- TableView
- retain cycle
- Value Type Reference Type
- 강한 참조 순환
- til
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[UIkit] 계산기 사칙연산 로직 본문
분리한 문자열을 압축하는 방식으로 더하기 - 빼기 - 나누기 - 곱하기 순으로 함수가 작동할 수 있도록 구현.
문제 상황 : 문자열을 ["+", "-", "*", "/"] 로 분리하여 음수의 부호를 분리해 버려 음수 계산이 안되는 문제.
-> 로직을 문자열이 아닌 다른 방식으로 전달 받으면 해결 할 수 있을거 같음.
//
// DataManager.swift
// CoupangClon
//
// Created by SeoJunYoung on 2023/02/10.
//
import UIKit
class DataManager {
var nowNum: String
var numsAry:[Double] = []
var calToggle = true
init(nowNum:String){
self.nowNum = nowNum
}
func mul(_ array:[String]) -> [String]{
var result = array
var index = 0
print("mul:\(result)")
while result.contains("*"){
if result[index] == "*"{
result[index - 1] = String(
Double(Int(Double(result[index - 1])! * Double(result[index + 1])! * 100)) / 100
)
result.remove(at:index)
result.remove(at:index)
index = 0
}
index += 1
}
//print("mul:\(result)")
return result
}
func div(_ array:[String]) -> [String]{
var result = array
var count = 0
print("div:\(result)")
while result.contains("/"){
if result[count] == "/"{
result[count - 1] = String(
Double(Int(Double(result[count - 1])! / Double(result[count + 1])! * 100)) / 100
)
result.remove(at:count)
result.remove(at:count)
count = 0
}
count += 1
}
//print("div:\(result)")
return result
}
func sum(_ array:[String]) -> [String]{
var result = array
var count = 0
print("sum:\(result)")
while result.contains("+"){
if result[count] == "+"{
result[count - 1] = String(Double(result[count - 1])! + Double(result[count + 1])!)
result.remove(at:count)
result.remove(at:count)
count = 0
}
count += 1
}
//print("sum:\(result)")
return result
}
func sub(_ array:[String]) -> [String]{
var result = array
var count = 0
print("sub:\(result)")
while result.contains("-"){
if result[count] == ""{
result[count] = "0"
result[count] = String(Double(result[count])! - Double(result[count + 2])!)
result.remove(at: count + 1)
result.remove(at: count + 1)
} else {
if result[count] == "-"{
result[count] = String(Double(result[count - 1])! - Double(result[count + 1])!)
result.remove(at:count)
result.remove(at:count)
count = 0
}
}
count += 1
}
print("sub:\(result)")
return result
}
func getResult(){
var expression = nowNum
var array:[String] = []
var elem = ""
var calType = ["+","-","*","/"]
for i in expression{
if !calType.contains(String(i)){
elem += String(i)
} else {
array.append(elem)
elem = ""
array.append(String(i))
}
}
array.append(elem)
var result = sum(sub(div(mul(array)))).reduce("",+)
var answer = Double(result)! == Double(Int(Double(result)!)) ? String(Int(Double(result)!)) : String(Double(result)!)
self.nowNum = answer
}
}