所以我正在转换这行代码
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(TidyFeed * _Nonnull item, NSDictionary<NSString *,id> * _Nullable bindings) {
return ![item.feedEntryId isEqualToString:feedEntryId];
}];
快速编码
var predicate = NSPredicate { (item: TidyFeed, bindings: NSDictionary) in
return !(item.feedEntryId == feedEntryId)
}
但是我得到了这个错误
无法将类型'(TidyFeed,NSDictionary) - > Bool'的值转换为预期的参数类型'(AnyObject,[String:AnyObject]?) - > Bool'
有没有人在使用块时遇到此错误?
Additional Info
SWIFT代码
apiClient.dismissFeed(feedEntryId, completion: {(responseObject: AnyObject, error: NSError) -> Void in
})
错误
无法将'(AnyObject,NSError) - > Void'类型的值转换为预期的参数类型'AFAPIOperationCompletionBlock!'
这是完成块代码 AFAPIOperationCompletionBlock
- (void) completion:(id)responseObject error:(NSError *)error
1 回答
在Objective-C中,闭包的第一个参数
id evaluatedBlock
可以被任何对象指针替换,如TidyFeed *
,这是一个已知的方法,如果你确定所评估的对象实际上属于那种类型,就可以避免额外的指针转换 .但是Swift不允许这样做,你必须将指针强制转换为块:
如果使用不属于
TidyFeed
类型的对象调用块,则会崩溃 . 一个安全的版本是可选的演员 . 这可以写得更紧凑:
另请注意如何将通配符模式
_
用于未使用的bindings
参数 .