在Swift中使用谓词

我正在为我的第一个应用程序浏览本教程(学习Swift):http : //www.appcoda.com/search-bar-tutorial-

ios7/

我被困在这部分(Objective-C代码):

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope

{

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];

searchResults = [recipes filteredArrayUsingPredicate:resultPredicate];

}

谁能建议如何在Swift中为NSPredicate创建等效项?

回答:

这实际上只是语法切换。好,所以我们有这个方法调用:

[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];

在Swift中,构造函数跳过“ blahWith…”部分,仅将类名用作函数,然后直接进入参数,因此[NSPredicate

predicateWithFormat: …]将变为NSPredicate(format: …)。(例如,[NSArray

arrayWithObject: …]将变为NSArray(object: …)。这是Swift中的常规模式。)

所以现在我们只需要将参数传递给构造函数即可。在Objective-

C中,NSString文字看起来像@"",但是在Swift中,我们仅对字符串使用引号。这样就给我们:

let resultPredicate = NSPredicate(format: "name contains[c] %@", searchText)

实际上,这正是我们这里需要的。

(顺便说一句,您会注意到其他一些答案,而不是使用格式字符串,如"name contains[c]

\(searchText)"。那是不正确的。它使用字符串插值,这与谓词格式不同,通常对此不起作用。)

以上是 在Swift中使用谓词 的全部内容, 来源链接: utcz.com/qa/406219.html

回到顶部