【问题标题】:Generic parameter 'Label' could not be inferred SWIFTUI无法推断通用参数“标签”SWIFTUI
【发布时间】:2019-12-23 16:50:00
【问题描述】:

谁能告诉我为什么在第 9 行我得到错误 Generic parameter 'Label' could not be inferred

struct PlayerControlsView : View {
  @State var playerPaused = true
  @State var seekPos = 0.0
  let player: AVPlayer
  var body: some View {
    HStack {
      Button(action: {
        self.playerPaused.toggle()
        if self.playerPaused {
          self.player.pause()
        }
        else {
          self.player.play()
        }
      }) {
        Image(systemName: playerPaused ? "play" : "pause")
          .padding(.leading, CGFloat(20))
          .padding(.trailing, CGFloat(20))
      }
      Slider(value: $seekPos, from: 0, through: 1, onEditingChanged: { _ in
        guard let item = self.player.currentItem else {
          return
        }

        let targetTime = self.seekPos * item.duration.seconds
        self.player.seek(to: CMTime(seconds: targetTime, preferredTimescale: 600))
      })
        .padding(.trailing, CGFloat(20))
    }
  }
}

当然还有如何解决它。

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    您的 Slider 初始化不正确。没有具有from:through: 的版本。不过,in: [0...1] 是默认值,因此您也不需要它。

      Slider(value: $seekPos, onEditingChanged: { _ in
    

    SwiftUI 错误消息通常是无用的。找到错误的方法是在编译之前一直注释掉内容,然后将它们重新添加。

    但是,您在此处所做的一切都行不通。您不能将AVPlayer 放在View 中。 View 是一个结构,它们一直被创建、复制和销毁。见How to stream remote audio in iOS 13? (SwiftUI)

    【讨论】:

    • 好的。这解决了这个问题,但现在我收到错误 Cannot use mutating getter on immutable value: 'self' is immutable on self.player.pause()
    • 正确;将播放器放入结构中会在很多方面失败。您不能将 AVPlayer 放在视图中。您需要一个模型类,将其作为 BindableObject 绑定到视图。 (或者作为一个单例,或者任何其他你想访问它的方式,但是你不能把一个 AVPlayer 放在一个视图中。)
    • 所以,我一直在关注本教程:medium.com/@chris.mash/… --- 但它太麻烦了。你能告诉我一种实现暂停和播放视频的方法吗?搜索栏也不错。
    猜你喜欢
    • 2022-08-17
    • 2020-04-26
    • 2019-12-16
    • 2020-05-26
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多