DDMathParser: анализ динамической формулы, которая содержит $ для ссылки на значение объекта в словаре

Я изо всех сил пытаюсь использовать DDMathParser Framework для выражения требования, которое я имею. У меня есть JSON полей & на основе выражений, определенные поля могут быть установлены обязательными, скрыты или установить его значение.

Выражения в обязательном теге в образце JSON не являются фиксированными и поэтому не понимают, как добиться динамического подхода к выражению.

[
  {
    "name": "firstName",
    "value": "Ameer",
    **"required": true**
  },
  {
    "name": "lastName",
    "value": "Shaikh",
    **"required": "$firstName != ‘’"**
  },
  {
    "name": "designation",
    "value": "",
    **"required": "$firstName == ‘Ameer’ && $lastName == ‘Shaikh’"**
  },
  {
    "name": "location",
    "value": "",
    **"hidden": false**
  }
]

На самом деле, выражение в JSON содержит $ для представления значения одного из объектов словаря из JSON. При этом каркас внутренне обрабатывает его как локальную переменную.

Эти выражения также могут иметь разные комбинации. Может быть несколько выражений, кроме "обязательных" параметров. Мне нужно запустить все соответствующие выражения для любого изменения значения в пользовательском интерфейсе.

РЕДАКТИРОВАТЬ

let expression = "$firstName == ‘Ameer’ && $lastName == ‘Shaikh’"
    let dict = ["firstName": "Amir", "lastName": ""]
    let e = try! Expression(string: expression)
    let result = try! Evaluator.default.evaluate(e, substitutions: dict)

Хотя он должен анализировать правильное значение из JSON, у меня есть жестко закодированная строка подстановок, чтобы хотя бы получить прорыв. Здесь подстановки ожидают String & Double и выдают ошибку как "Невозможно преобразовать значение типа [String: String] в ожидаемые замены типа arg (Dcitionary). Есть ли способ передать подстановки String: String?

1 ответ

DDMathParser не предназначен для оценки строк. Технически возможно заставить это работать, но это немного выходит за рамки фреймворка.

В этой ситуации, я думаю, вам лучше использовать NSPredicate, который позволяет сравнения строк и подстановки переменных.

Другие вопросы по тегам