为啥函数调用在 swiftui 中返回不可变值时出现错误?
Posted
技术标签:
【中文标题】为啥函数调用在 swiftui 中返回不可变值时出现错误?【英文标题】:Why am I getting error as function call returns immutable value in swiftui?为什么函数调用在 swiftui 中返回不可变值时出现错误? 【发布时间】:2021-02-17 08:40:24 【问题描述】:我想在一些时间间隔之间播放专辑中的歌曲,我使用这段代码来实现这个概念。但我不知道为什么我会收到这个错误。请帮我解决它。
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
变异运算符的左侧不可变:函数调用返回不可变值
【问题讨论】:
【参考方案1】:问题 1: 那是因为当您在 swift 中键入强制转换值时,它会返回一个不可变值(只读)。所以语句Int(starting_song)
将返回一个只读值,因此您不能通过添加item
和myModel.gap
来更改它的值。
问题 2: 此外,您已将 starting_song
声明为 let
,因此无论如何您都无法更改其值。
首先,将let starting_song
更改为var starting_song
。
接下来将Int(starting_song) += item + myModel.gap
更改为
starting_song += Double(item + myModel.gap)
这将起作用,因为 1. 您将 item
和 gap
的总和转换为双精度,而 starting_song
已经是双精度(类型检查不会失败) 2. 类型转换的值(项目的总和和间隙)没有被修改。
【讨论】:
【参考方案2】:我希望您需要将强制转换为 Int。
starting_song += Int(item + myModel.gap)
【讨论】:
以上是关于为啥函数调用在 swiftui 中返回不可变值时出现错误?的主要内容,如果未能解决你的问题,请参考以下文章
使用 SwiftUI 时异步填充/预填充多个用户可变的“@State”值?
Swiftui 无法分配给属性:'self' 是不可变的错误