ios - iOS 中的基本表达语言

标签 ios iphone objective-c parsing

我希望创建一种可以在 iOS 应用程序中利用的基本表达语言。我将在运行时从文件中提取这些值。过去我只是利用正则表达式来实现此目的,但它有其自身的局限性(因为我基本上只有两个操作数和一个运算符)。我希望对如下表达式有更强大的支持:

一些例子:

valueA != valueB
(valueA == valueB) && (valueC != valueD)
valueA >= valueB

基本上,我想为这个表达式求值器提供一个字典,并让它从该字典中提取变量的值。

对于完成这项工作的有效方法有什么想法吗?今天早上我对 CoreParse 和 ParseKit 进行了大约 5 分钟的研究,但我对两者(以及整个解析器生成器)都是新手。

最佳答案

您可以使用NSPredicate,例如:

NSString *expr = @"($valueA == $valueB) && ($valueC != $valueD)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:expr];
NSDictionary *vars = @{@"valueA": @7, @"valueB" : @7, @"valueC": @3, @"valueD": @4};
BOOL result = [predicate evaluateWithObject:nil substitutionVariables:vars];

请注意,谓词字符串中的所有变量都必须以 $ 开头。

关于ios - iOS 中的基本表达语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605755/

相关文章:

ios - "Supported Interface Orientations"有先例吗?

ios - 为什么页面推送动画 Tabbar 在 iPhone X 上移

React Native 中的 iOS 启动屏幕

iphone - 如何知道 ALAsset url 是否包含视频或图像?

iphone - 如何从 ios 中的源图像更改脸部的肤色?

iphone - 从 JSON 中为 UITableView 排序 NSDictionary

ios - 如何显示带有日期的时区缩写

ios - 在 iPhone 上确定用户是否启用了推送通知

ios - 在我准备好数据之前,如何防止 cellForItemAtIndexPath 执行?

ios - 自定义 UIViewController 的子类化到底是如何工作的?