我对Swift和SwiftUI非常陌生,并试图找出如何实现以下功能。
ContentView
创建两个User
对象(播放器和cpu)ContentView
将这些对象传递给子视图ScoreView
ScoreView
应打印User
中的属性(例如分数和姓名)
1.当User.score
更改时,需要更新ScoreView
这是我目前所拥有的,并且它工作正常。但是我担心,因为有一个@Binding
附加到ScoreView
中的变量,它可能会改变值。我希望这个视图将这些值设置为只读。
class User: ObservableObject {
var name: String
@Published var score: Int
init(name: String, score: Int) {
self.name = name
self.score = score
}
}
struct ContentView: View {
@StateObject var player = User(name: "Player", score: 0)
@StateObject var cpu = User(name: "CPU", score: 0)
var body: some View {
ZStack {
Image("background-plain").resizable().ignoresSafeArea()
VStack {
Spacer()
Image("logo")
Spacer()
HStack {
Spacer()
ScoreView(name: $player.name, score: $player.score)
Spacer()
ScoreView(name: $cpu.name, score: $cpu.score)
Spacer()
}
.fontWeight(.semibold)
.foregroundColor(.white)
Spacer()
}
}
}
}
struct ScoreView: View {
@Binding var name: String
@Binding var score: Int
var body: some View {
VStack {
Text(name)
.font(.headline)
.padding(.bottom, 10)
Text(String(score))
.font(.largeTitle)
}
}
}
1条答案
按热度按时间nlejzf6q1#
替换
与
然后从父级中删除
$
,在父级中删除两者的连接处。您还应该将
User
更改为值类型。