如何修复上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但在闭包体中使用了 1 个?

Posted

技术标签:

【中文标题】如何修复上下文闭包类型 \'((String, JSON), (String, JSON)) -> Bool\' 需要 2 个参数,但在闭包体中使用了 1 个?【英文标题】:How to fix Contextual closure type '((String, JSON), (String, JSON)) -> Bool' expects 2 arguments, but 1 was used in closure body?如何修复上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但在闭包体中使用了 1 个? 【发布时间】:2017-06-16 05:29:15 【问题描述】:

我正在将我的代码从 swift 3.2 转换为 swift 4,我收到此代码的错误

self.arrData = json.sorted $0.0.1["chkincount"].doubleValue > $0.1.1["chkincount"].doubleValue .map  $0.1 

上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但在闭包主体中使用了 1 个

如何解决这个问题?

【问题讨论】:

这能回答你的问题吗? "contextual closure type expects 2 arguments" error when using reduce in Swift 4 ***.com/help/minimal-reproducible-example @pkamb 我已经得到了我的问题的答案,您所指的链接在我发布我的问题时指向那里。 【参考方案1】:

在排序后的闭包中将$0.0.1 更改为$0.1 以访问第一个闭包参数,将$0.1.1$1.1 更改为在进行此更改后访问第二个闭包参数。

self.arrData = json.sorted $0.1["chkincount"].doubleValue > $1.1["chkincount"].doubleValue .map  $0.1 

【讨论】:

你能解释一下为什么这段代码在 swift 4 及更高版本中不能工作吗? @VarunNaharia 我已经在我的回答中写道,您没有在闭包中访问第二个参数$1,因此您需要访问它而不是$0.1,它是$1 $0$1 代表 (String, JSON) 而不是 ((String,JSON),(String,JSON)) @VarunNaharia 可能是他们在 Swift 4 中改变了这一点。 github.com/apple/swift-evolution/blob/master/proposals/…

以上是关于如何修复上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但在闭包体中使用了 1 个?的主要内容,如果未能解决你的问题,请参考以下文章

闭包参数列表的上下文类型需要 1 个参数,但指定了 4 个

理解运用JS的闭包高阶函数柯里化

无法在当前上下文中推断闭包类型

JS(作用域和闭包)

js判断变量的类型(使用闭包来玩一把)

关于JS闭包