Objective-C 等效 lambda 表达式

本文关键字:表达式 lambda 等效 Objective-C | 更新日期: 2023-09-27 17:56:47

我主要是一名iOS开发人员,但一直在用C#在Visual Studio中进行一些UI单元测试。我在 C# 中遇到了这个

var table = Driver.FindElements(By.TagName("table"));
return table.First(t => t.Displayed == true);

现在,在 Objective-C 中,我可能会得到一个数组,然后进行循环,直到我找到一个满足我的条件的元素,然后返回它,这有点混乱。
有谁知道 C# 中这个可爱的东西有一个很好的等价物。
我有过在Objective-C中使用lambda表达式和使用块的经验,但是语法很糟糕,而且比一点for循环更糟糕。
如果有人能指出我正确的方向,我将不胜感激。
谢谢
卢克

Objective-C 等效 lambda 表达式

Objective-C并不以其漂亮或简洁的语法而闻名。 我想出的两个选项是:

NSArray *a = @[ @1, @2, @3, @4 ];
NSLog(@">= 3: %@", [a filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF >= 3"]]);
NSLog(@">= 3: %@", [a filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id obj, id bindings) { return [obj integerValue] >= 3; }]]);

要仅从任一过滤数组中获取第一个对象,只需附加 .firstObject

在 Swift 中,它变得更好,具有更好的块语法、更好的类型推断和自动闭包。