본문 바로가기
TIL(Today I Learned)

2024.04.30 Today I Learned

by 승환파크 2024. 4. 30.

어플리케이션을 만들다 보면 간혹 문자열로 된 계산식을 계산할 때가 종종 존재한다. 이 때 문자열을 모두 숫자형 데이터로 전환하여 계산을 진행하는데에는 많은 노력이 들게된다. 하지만 이러한 계산을 아주 쉽게 문자열만 전달하면 사용할 수 있는 함수가 존재한다. 바로 NSExpression 이라는 함수이다.

 

NSExpression

NSExpression 은 Foundation 프레임워크에서 제공하는 클래스로, 문자열 형식의 수식을 표현하고 계산할 수 있는 함수이다. 주로 수학적인 계산이나 조건식을 평가하는데 사용된다. (필자는 계산기를 만드는 과정에서 사용했다.)

import Foundation

func evaluateExpression(_ expressionString: String) -> Double? {
    let expression = NSExpression(format: expressionString)
    if let value = expression.expressionValue(with: nil, context: nil) as? Double {
        return value
    }
    return nil
}

if let result = evaluateExpression("1 + 2 - 3 * 2") {
    print("결과 : \(result)")
} else {
    print("수식을 평가할 수 없습니다.")
}

// 실행 결과
// 결과 : -3

 

위 예제는 String 타입으로 주어진 계산식을 계산하여 값이 잘 나오는지 확인하는 예제이다. 값은 -3 으로 값이 나왔고 계산하는 과정은 아래와 같다.

  1. 3 * 2
  2. 1 + 2
  3. (1 + 2) - (3 * 2)

실제 수학에서 계산하듯 연산 순서에 맞게 계산을 진행하는 것을 알 수 있다.

'TIL(Today I Learned)' 카테고리의 다른 글

2024.05.03 Today I Learned  (1) 2024.05.03
2024.05.02 Today I Learned  (0) 2024.05.02
2024.04.29 Today I Learned  (0) 2024.04.29
2024.04.26 Today I Learned  (1) 2024.04.26
2024.04.25 Today I Learned  (0) 2024.04.25