【问题标题】:Anonymous closure arguments cannot be used inside a closure that has explicit arguments匿名闭包参数不能在具有显式参数的闭包内使用
【发布时间】:2020-08-20 19:25:35
【问题描述】:

所以我试图在 SwiftUI 中创建一个使用数组的每个项目的 Picker。当我尝试让它使用数组的项目时,Xcode 说“不能在具有显式参数的闭包内使用匿名闭包参数”(如代码中所示)

import SwiftUI

struct TimerPicker: View {
    @State var selectedTime = 0
    
    let availableMinutes = Array(1 ... 59)
    private let pickerStyle = SegmentedPickerStyle()
    var body: some View {
        VStack {
            Picker(selection: $selectedTime, label: Text("")) {
                ForEach(0 ..< availableMinutes.count) {_ in
                    Text("\(self.availableMinutes[$0]) min")
                }
                
            }
            .labelsHidden()
        }
    }

提前感谢您的每一个回答。

【问题讨论】:

  • 删除 _ in 以使用匿名参数。 _ 表示您不需要参数或返回值。另一种方法是将下划线替换为像index in 这样的变量名,然后在闭包中使用它,Text("\(self.availableMinutes[index]) min")

标签: swift swiftui uipickerview


【解决方案1】:

正如 Joakim 所暗示的,匿名参数是 $0$1,这些参数仅基于参数的顺序。 闭包体的完整语法是

{ (parameters) -> return type in
    statements
}

如果不提供参数列表,则需要使用上面提到的匿名参数$0/$1语法。

如果您提供参数名称,则您不能使用匿名参数。您必须使用您提供的名称。

闭包中的_ 告诉编译器你的闭包代码将完全忽略该参数。一旦你这样做了,参数在闭包的主体中是不可访问的。 (请注意,您可以忽略某些参数并将其他参数映射到名称。)

要么摆脱闭包的 _ in 部分并使用匿名参数,要么将 _ 更改为像 index 这样的参数名称(正如 Joakim 在他们的评论中所建议的那样。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2021-12-10
    • 2021-09-29
    • 2022-01-14
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多