gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:32:01 25 4
gpt4 key购买 nike

所以我正在转换这行代码

 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)
}

但我收到此错误

Cannot convert value of type '(TidyFeed, NSDictionary) -> Bool' to expected argument type '(AnyObject, [String : AnyObject]?) -> Bool'

有人在使用 block 时遇到过这个错误吗?

其他信息

Swift 代码

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

})

错误

Cannot convert value of type '(AnyObject, NSError) -> Void' to expected argument type 'AFAPIOperationCompletionBlock!'

这是 AFAPIOperationCompletionBlock 的完成 block 代码

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

最佳答案

在 Objective-C 中,闭包的第一个参数idvaluedBlock可以用任何对象指针替换,例如 TidyFeed *,并且如果您确定所评估的对象实际上属于该类型,则这是一种避免额外指针转换的已知方法。

但是 Swift 不允许这样做,你必须强制转换指针 block 内:

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

如果使用不属于该 block 的对象调用该 block ,则会崩溃类型为 TidyFeed。安全版本是

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

有可选的 Actor 阵容。这可以更紧凑地写为:

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

另请注意如何使用通配符模式 _ 来表示未使用的内容绑定(bind)参数。

关于objective-c - 无法将类型的值转换为预期的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36469079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com