匿名闭包参数不能在具有显式参数的闭包内使用

问题描述

所以我试图在SwiftUI中创建一个使用数组每个项目的选择器。当我尝试让Xcode使用数组的项(在代码中可见)时,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()
        }
    }

在此先感谢您的回答。

解决方法

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

{ (parameters) -> return type in
    statements
}

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

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

闭包中的_告诉编译器,闭包代码将完全忽略该参数。完成此操作后,闭包体内将无法访问该参数。 (请注意,您可以忽略某些参数,而将其他参数映射到名称。)

要么摆脱闭包的_ in部分,要么使用匿名参数,或者将_更改为index之类的参数名称(如Joakim在其评论中所建议的那样)。