개발하는 동글 :]

[TIL],[UIkit] 계산기 사칙연산 로직 본문

카테고리 없음

[TIL],[UIkit] 계산기 사칙연산 로직

동글하다 2023. 7. 21. 10:50

분리한 문자열을 압축하는 방식으로 더하기 - 빼기 - 나누기 - 곱하기 순으로 함수가 작동할 수 있도록 구현.

문제 상황 : 문자열을  ["+", "-", "*", "/"] 로 분리하여 음수의 부호를 분리해 버려 음수 계산이 안되는 문제.

-> 로직을 문자열이 아닌 다른 방식으로 전달 받으면 해결 할 수 있을거 같음.

//
//  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
    }



    
}