Swiftpack.co - danielgindi/SwiftEval as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by danielgindi.
danielgindi/SwiftEval 1.0.7
Eval for Swift
⭐️ 2
🕓 3 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/danielgindi/SwiftEval.git", from: "1.0.7")

Eval for Swift

Easily evaluate simple expressions on the go...

This is a port of the BigEval.js/Eval.net library

Features:

  • Evaluate basic math operators (5 * (4 / 3))
  • Use constants (x * 27 / 4)
  • Support for pre-defined function calls (30 * pow(24, 6) / cos(20))
  • Support for custom function calls
  • Support for logic operators (26 * 3 < 100 - returns a bool value)
  • Support for bitwise operators ((1 << 2) == 4)
  • Support for string values ("test" + 5 == "test5")
  • Customize the type that is used for numeric values in the expression.
  • Customize the code behind the execution of any of the operators.
  • Support for compiling an expression and running multiple times while supplying different constants

Installation

Just add the repo in Swift Package Manager

Usage

import Eval
        
let config = DoubleEvalConfiguration()

let result1 = try Evaluator.execute("12+45*10", config) as? Double
let result2 = try Evaluator.execute("30 * pow(24, 6) / cos(20)", config) as? Double

let compiled = try Evaluator.compile("5 * n", config.clone())

compiled.setConstant(8, forName: "n")
let result3 = try compiled.execute() as? Double

compiled.setConstant(9, forName: "n")
let result4 = try compiled.execute() as? Double

Operators

The operators currently supported in order of precedence are -

[
    ['!'],  // Factorial
    ['**'],  // power
    ['/', '*', '%'],
    ['+', '-'],
    ['<<', '>>'],  // bit shifts
    ['<', '<=', '>', '>='],
    ['==', '=', '!='],   // equality comparisons
    ['&'], ['^'], ['|'],   // bitwise operations
    ['&&'], ['||']   // logical operations
]

Me

Help

If you want to buy me a beer, you are very welcome to Donate Thanks :-)

License

This library is under the Apache License 2.0.

This library is free and can be used in commercial applications without royalty.

GitHub

link
Stars: 2
Last commit: 3 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics