我正在尝试使用 .onTapGesture() 在点击视图上调用方法并传递某种 ID 或任何其他形式的标识符,但我不知道如何。
我有一个ListView
从我的数组中获得的数据创建的视图trackPreviewList: [TrackpreviewList]
。
视图如下所示:
struct ListView: View {
@ObservedObject var model: PlaybackService
@State var list = PlaybackService.sharedInstance.trackPreviewList
var body: some View {
List {
Section(header: Text("Songs")) {
ForEach(model.trackPreviewList!, id: \.id) {
Text($0.artistName + ": " + $0.name)
}
.onDelete(perform: deleteTrack)
.onTapGesture(perform: skipTo)
}
}
}
我对 SwiftUI 和一般编码非常陌生,但我认为正确的方法是说单元格(视图?) 2 被点击,因此将 2 传递给func playerSkipTo(skipToIndex: Int)
我尝试像这样对值 2 进行硬编码的方法,它适用于硬编码值:
虽然我对如何传递某种标识符一无所知,但我认为我的问题是我试图访问该方法“知道它”的范围之外的对象。我试图使用 $0.name 变量来查看我是否可以传递任何东西,但我得到了这个错误Contextual closure type '() -> Void' expects 0 arguments, but 1 was used in closure body
,我认为这是因为 .onTapGesture() 方法没有闭包?
我尝试使用与使用 IndexSet 的 .onDelete() 方法相同的逻辑,如下所示:
最后我想将值传递给的方法如下所示:
func playerSkipTo(skipToIndex: Int) {
if skipToIndex < ((trackPreviewList!.underestimatedCount)-1) {
_ = firstly {
TracklistProvider.sharedInstance.getPlaybackURL(trackPreview: trackPreviewList![skipToIndex])
}.map { playbackoptions in
self.createPlayerItemFromLink(assetURL: (playbackoptions?.playbackUrl)!)
}.done{
self.replacePlayerItem()
}
} else {
print("The index \(skipToIndex) is out of bounds")
}
}
我知道我还需要更改playerSkipTo()
采用 IndexSet 的方法,我也尝试过尝试将其转换为 Int 等。
非常感谢任何帮助或指示!
if skipToIndex < ((trackPreviewList!.underestimatedCount)-1) {
_ = firstly {
TracklistProvider.sharedInstance.getPlaybackURL(trackPreview: trackPreviewList![skipToIndex])
}.map { playbackoptions in
self.createPlayerItemFromLink(assetURL: (playbackoptions?.playbackUrl)!)
}.done{
self.replacePlayerItem()
}
} else {
print("The index \(skipToIndex) is out of bounds")
}
}