Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 无法将类型的值转换为预期的参数类型_Objective C_Xcode_Swift_Nspredicate - Fatal编程技术网

Objective c 无法将类型的值转换为预期的参数类型

Objective c 无法将类型的值转换为预期的参数类型,objective-c,xcode,swift,nspredicate,Objective C,Xcode,Swift,Nspredicate,我正在转换这行代码 NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(TidyFeed * _Nonnull item, NSDictionary<NSString *,id> * _Nullable bindings) { return ![item.feedEntryId isEqualToString:feedEntryId]; }]; 但是我得到了这个错误 无法将类型为“(

我正在转换这行代码

 NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(TidyFeed * _Nonnull item, NSDictionary<NSString *,id> * _Nullable bindings) {
        return ![item.feedEntryId isEqualToString:feedEntryId];
    }];
但是我得到了这个错误

无法将类型为“(TidyFeed,NSDictionary)->Bool”的值转换为预期的参数类型“(AnyObject,[String:AnyObject]?)->Bool”

是否有人在使用块时遇到此错误

其他信息

Swift代码

  apiClient.dismissFeed(feedEntryId, completion: {(responseObject: AnyObject, error: NSError) -> Void in

    })
错误

无法将类型为“(AnyObject,NSError)->Void”的值转换为预期的参数类型“AFAPIOperationCompletionBlock!”

这是AFAPIOperationCompletionBlock的完成块代码

- (void) completion:(id)responseObject error:(NSError *)error 

在Objective-C中,闭包的第一个参数
id evaluatedBlock
可以由任何对象指针替换,如
TidyFeed*
,以及 是一种已知的方法,可以避免额外的指针转换,前提是您确定所计算的对象实际上是该类型的对象

但是Swift不允许这样做,您必须抛出指针 在街区内:

let predicate = NSPredicate { (item: AnyObject, _) -> Bool in
    return (item as! TidyFeed).feedEntryId != feedEntryId
}
如果使用不可用的对象调用块,则会崩溃 类型
TidyFeed
。一个安全的版本是

let predicate = NSPredicate { (item: AnyObject, _) -> Bool in
    if let feed = item as? TidyFeed {
        return feed.feedEntryId != feedEntryId
    } else {
        return false
    }
}
有一个可选的演员阵容。这可以更简洁地写为:

let predicate = NSPredicate { (item: AnyObject, _) -> Bool in
    return (item as? TidyFeed)?.feedEntryId != feedEntryId
}
还请注意如何将通配符模式
\uu
用于未使用的
绑定
参数

let predicate = NSPredicate { (item: AnyObject, _) -> Bool in
    return (item as? TidyFeed)?.feedEntryId != feedEntryId
}