我正在尝试使用 .onTapGesture() 调用点击 View 上的方法并传递某种 ID 或任何其他形式的标识符,但我不知道如何操作。
我有一个 View ListView
,它是根据从数组 trackPreviewList: [TrackpreviewList]
获取的数据创建的。
View 如下所示:
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 和编码非常陌生,但我认为正确的方法是说 cell(view?) 2 被点击,因此将 2 传递给方法 func playerSkipTo(skipToIndex: Int)
我尝试像这样对值 2 进行硬编码,它适用于硬编码值:
虽然我对如何传递某种标识符一无所知,但我认为我的问题是我试图访问方法“知道它”的范围之外的对象。
我尝试使用 $0.name 变量只是为了看看我是否可以传递任何内容,但我收到此错误上下文闭包类型'() -> Void'需要0个参数,但在闭包主体中使用了1个
我认为这是因为 .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 等。
非常感谢任何帮助或指示!
Heres the playerSkipTo method:
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")
}
}
最佳答案
不要跳到索引,而是跳到特定的跟踪对象:
func playerSkipTo(_ playbackoptions: PlaybackOptions) {
// ...
}
然后更改您的 View 代码以在 Text
而不是 ForEach
上调用此函数:
List {
Section(header: Text("Songs")) {
ForEach(model.trackPreviewList!, id: \.id) {
Text($0.artistName + ": " + $0.name)
.onTapGesture {
self.playerSkipTo($0)
}
}
}
}
关于swiftui - 使用 SwiftUI List()、ForEach()、.onTapGesture WatchOS 6 传递值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411447/