我正在学习我的第一个应用程序的教程(学习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)"的格式字符串.这是不对的.它使用字符串插值,这与谓词格式化不同,通常不适用于此.)

Ios相关问答推荐

iOS中的分段拾取器—手柄点击已 Select 的项目

在Swift5中,将某些属性值从一个类复制到另一个类实例

为什么导航栏在与Style.Page的选项卡栏一起使用时停止工作?

无法在所有窗口上方显示图像

当包含UITextView的inputAccessoryView显示键盘时,iOS UITableView内容会出现UINavigationBar奇怪的错误

如何通过S定义的对象设置删除基于块的观察者的测试?

使用 WebKit 加载 YouTube 视频时控制台中打印警告

为什么applicationState发布者只发布一次?

iOS应用启动时崩溃问题解决方法-NO_CRASH_STACK-DYLD 4个符号丢失

无法从 Xcode 获取模拟器列表.请打开 Xcode 并try 直接从那里运行项目以解决剩余问题

SwiftUI 动画:为什么容器视图在移动?我很难理解这种行为

在 Swift 中从 Objective C 集合调用块

如何在Collection 后更改并保留按钮 colored颜色 ,然后在 SwiftUI 中切换回来?

.onAppear() 函数不适用于 NavigationLink

Xcode 14 需要为 Pod Bundles Select 开发团队

如何阻止图像在 UIImageView 中拉伸?

当键盘出现在 iOS 中时,将 UIView 上移

UIView 动画与 CALayers

将 iPhone xib 转换为 iPad xib?

NSURLSession:如何增加 URL 请求的超时时间?