问题描述
所以我试图在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在其评论中所建议的那样)。