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
}