为什么我在 swiftui 中作为函数调用 returns 不可变值出现错误?

Why am I getting error as function call returns immutable value in swiftui?

我想在一些时间间隔之间播放专辑中的歌曲,我使用这段代码来实现这个概念。但我不知道为什么会出现此错误。请帮我解决一下。

mysongsplayer.play()
            
let date = Date()
let calendar = Calendar.current
let now = calendar.component(.second, from: date)
let starting_song = Double(now) + mysongsplayer.duration + (myModel.delay * 60)
            
let stop_song = starting_song + (myModel.time * 60)
while (start_song > stop_song) {
  for item in 0..<(selected_songs).count {
    if (stop_song > starting_song) {
      DispatchQueue.main.asyncAfter(deadline: .now() + starting_song) {
        selected_songs[item].play()
        Int(starting_song) += item + myModel.gap
      }
    }
  }
}

所以此时我收到了这个错误

Int(starting_song) += item + myModel.gap

Left side of mutating operator isn't mutable: function call returns immutable value

我希望您需要将转换转换为 Int。

starting_song += Int(item + myModel.gap)

问题 1: 那是因为当您在 swift 中键入一个值时,它 return 是一个不可变值(只读)。所以语句 Int(starting_song) 将 return 一个只读值,因此你不能通过添加 itemmyModel.gap.

来更改它的值

问题 2: 此外,您已将 starting_song 声明为 let,因此无论如何您都无法更改其值。

首先,将 let starting_song 更改为 var starting_song。 接下来将 Int(starting_song) += item + myModel.gap 更改为 starting_song += Double(item + myModel.gap)

这会起作用,因为 1. 您将 itemgap 的总和转换为 double,而 starting_song 已经是 double(类型检查不会失败)2.未修改类型转换值(项和间隙之和)。