gpt4 book ai didi

objective-c - NSPredicate 作为约束求解器?

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:50 24 4
gpt4 key购买 nike

我正在从事一个项目,其中包含一些比我以前使用的界面元素动态布局稍微复杂的界面元素。我总是觉得编写复杂的代码来检查某某某某是否接近某某某某某物,在那种情况下将它向某个方向移动 x% 等,我总是觉得很愚蠢。这不是应该如何进行编程。编程应该尽可能地声明!

正因为我要做的事情比较简单,我觉得这是一个尝试新事物的好机会,所以我想到了使用NSPredicate作为一个简单 constraints solver .我只用过 NSPredicate到目前为止非常简单的任务,但我知道它能做更多。

是否有任何想法、经验、示例、警告、见解在这里可能有用?

我将举一个非常简单的例子,这样就可以回答一些具体的问题。我怎么能用 NSPredicate解决以下约束:

viewB.xmid = (viewB.leftEdge + viewB.width) / 2
viewB.xmid = max(300, viewA.rightEdge + 20 + viewB.width/2)

("viewB 应该在坐标 300 上水平居中,除非它的左边缘在 viewB 的右边缘的 20 像素以内,在这种情况下,viewA 的左边缘应该保持固定在 viewB 的右边缘和 viewA 的水平中心的右侧 20 像素处被推到右边。”)

viewA.rightEdgeviewB.width可以变化,这些是“输入变量”。

编辑:任何解决方案都可能必须使用 NSExpression方法 -(id)expressionValueWithObject:(id)object context:(NSMutableDictionary *)context . This answer是相关的。

最佳答案

Cocoa 谓词本质上是一种用于 Cocoa 的 SQL。他们的大部分能力在于他们进行字符串搜索和比较的能力,并且没有额外的(有用的)设施来处理你正在尝试做的事情,这是(据我所知)数字比较。我也不认为它们可以生成非常易于维护的代码。

正则 bool 表达式在功能上等同于 Cocoa 谓词,您可以重新排列它们并将它们巧妙地分配给一些命名得当的变量。

if (viewAIs20PixelsAway && viewBIs30PixelsAway) {
[viewA moveToPositionA];
} else ...

(一个非常简单的例子......我本可以想出更好的东西。)

另外,您可以将它们隐藏在一个方法中并像使用 NSPredicate 一样评估它们。

关于objective-c - NSPredicate 作为约束求解器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com