gpt4 book ai didi

swift - 如何从更高的闭包级别访问隐式闭包参数

转载 作者:行者123 更新时间:2023-11-28 10:06:32 26 4
gpt4 key购买 nike

我想迭代一个 enum然后在 switch/case 中使用 $0在 enum 中的提取操作中调用的闭包中向下一级语句迭代循环,如下:

enum GenericType: CaseIterable {
case purchase
case sale
// etc....
}

然后使用的代码如下:

GenericType.allCases.forEach {
// let type = $0
Manager.fetchItems(ofType: $0, onSuccess: { (data) in
switch $0 {
case purchase:
// Do something
case sale:
// Do something
}
}

Xcode 10 假定 $0data (闭包中的参数)并给出此错误消息:

Anonymous closure arguments cannot be used inside a closure that has explicit arguments; did you mean 'data'?

我能够在获取之前使用它:

let type = $0

然后使用 typeswitch/case声明。

有没有办法访问$0来自闭包内更高级别上下文的速记参数?解决方法是否可行?

谢谢

最佳答案

$0 只能引用“链上游”的第一个闭包上下文。要访问外部闭包的参数,您需要为它们命名:

GenericType.allCases.forEach { genericType in
Manager.fetchItems(ofType: genericType, onSuccess: { data in
switch genericType {
case .purchase: return
// Do something
case .sale: return
// Do something
}
})
}

关于swift - 如何从更高的闭包级别访问隐式闭包参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52545815/

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