今天「暢想資源」就來向大家推薦一款功能強大的數學表達式解析器「DDMathParser」,這一函式庫可以直接將類似 5^(2/(1+2)) 類的數學表達式計算出結果,這一開源函式庫的使用可比自帶的 formula.expression.expressionValueWithObject 方便多了 
安裝
將以下內容加入你的「Podfile」中即可:(Swift的話同樣也不要忘記 use_frameworks! 這一重要的一行)
| 1 | pod 'DDMathParser', '~> 2.0' | 
使用
首先要記得先 import 這一函式庫:(注意是「MathParser」)
| 1 | import MathParser | 
然後試試看算最簡單的一條算式:(記得使用 do { } catch { } 以進行錯誤處理)
| 1 2 3 4 5 6 7 | do {     let value = try "1 + 2".evaluate()     print("Result: \(value)")     // "Result: 3.0" } catch let error as NSError {     print("Error: \(error.localizedDescription)") } | 
如果想要用類似 M 等的變量呢?很簡單:
| 1 2 3 4 5 6 7 | do {     let value = try "$M + 2".evaluate(["M": 40])     print("Result: \(value)")     // "Result: 42.0" } catch let error as NSError {     print("Error: \(error.localizedDescription)") } | 
而如果你想要計算三角函數的話,則需要自己稍微定義一下是度度量(degree)還是弧度量(radian):
| 1 2 3 4 5 6 7 8 9 10 11 12 | do {     var evaluator = Evaluator()     evaluator.angleMeasurementMode = .Degrees       // Or ".Radians"     let expression = try Expression(string: "sin(5)")     let value = try evaluator.evaluate(expression)     print("Result: \(value)")     // "Result: 0.0871557427476582" } catch let error as NSError {     print("Error: \(error.localizedDescription)") } | 
另外如果你的輸入是由用戶進行的話,一定一定一定要記得妥善處理錯誤:
| 1 2 3 4 5 6 7 | do {     let value = try "1nd.2/23".evaluate()     print("Result: \(value)") } catch let error as NSError {     print("Error: \(error.localizedDescription)")     // "Error: The operation couldn’t be completed. (MathParser.EvaluationError error 0.)" } | 
| 1 2 3 4 5 6 7 | do {     let value = try "1/0".evaluate()     print("Result: \(value)") } catch let error as NSError {     print("Error: \(error.localizedDescription)")     // "Error: The operation couldn’t be completed. (MathParser.EvaluationError error 2.)" } | 
大家也可以前往該項目的Github主頁及Wiki查看更多使用方法:  
 
歷史上的今天
2013年:神人論壇回覆(4條評論)
