0

我正在努力使用 DDMathParser 框架来满足我的表达要求。我有字段的 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 中的字典对象值之一。其中框架在内部将其视为局部变量。

这些表达式也可能有不同的组合。除了“必需”参数之外,可能还有几个表达式。我需要为 UI 中的任何值变化运行所有相关表达式。

编辑

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 替换?

4

1 回答 1

1

DDMathParser 不是为进行字符串评估而构建的。它在技术上是可行的,但它有点超出了框架的范围。

对于这种情况,我认为您最好使用NSPredicate,它确实允许字符串比较和变量替换。

于 2017-08-01T02:38:20.780 回答