gpt4 book ai didi

swiftui - 不能在不可变值 : 'self' is immutable in SwiftUI 上使用可变成员

转载 作者:行者123 更新时间:2023-12-03 15:49:08 25 4
gpt4 key购买 nike

对于以下代码,我收到以下错误。我不知道如何解决这个问题。怎么打电话volumeCheck()单击按钮时?

struct ContentView: View {

var player = AVAudioPlayer()

var body: some View {
HStack {
Button(action: {
self.volumeCheck()
}) {
Text("Click to test chimes volume")
}
}
}

mutating func volumeCheck() {
guard let url = Bundle.main.url(
forResource: "chimes",
withExtension: "mp3"
) else { return }

do {
player = try AVAudioPlayer(contentsOf: url)
player.prepareToPlay()
player.volume = Float(self.sliderValue)
player.play()
} catch let error {
print(error.localizedDescription)
}
print("volume checked print")
}
}

最佳答案

问题是Viewstruct它是 body field 是一个计算属性,带有 非突变 setter/getter 。在您的代码中,它发生 变异要在该非变异 getter 中调用的方法。因此,您需要做的就是将播放器置于某种模型中:

class Model {
var player: AVPlayerPlayer()
}

struct ContentView: View {

var model = Model()

// player can be changed from anywhere
}

附言在其他一些情况下,您可能希望模型中的更改反射(reflect)在 View 中,因此您必须在模型声明之前添加 @ObservedObject。

希望有帮助

关于swiftui - 不能在不可变值 : 'self' is immutable in SwiftUI 上使用可变成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com