如何修复上下文闭包类型 '((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 个?的主要内容,如果未能解决你的问题,请参考以下文章