![](/img/trans.png)
[英]navigationBarItems “Type [view] cannot conform to 'View'; only struct/enum/class types can conform to protocols”
[英]Access a @Published variable does not compile; “cannot conform to 'View'; only struct/enum/class types can conform to protocols”
在 Text(...) 中訪問 settings.score 或在 Button() 中更改它可以正常工作,但是當我嘗試將值寫入變量時,編譯器會抱怨...任何幫助都會很棒,謝謝!
import SwiftUI
struct ContentView: View
{
@EnvironmentObject var settings: UserSettings // settings are initialized in AppDelegate
@State var myscore: Int = 0
var body: some View
{
NavigationView
{
VStack
{
myscore = settings.score // COMPILER FAIL: Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
Text("\(settings.score)") // here score shows up correct!
.padding()
Button("Increase Score")
{
settings.score += 1 // this also works
}
.padding()
NavigationLink(destination: DetailView())
{
Text("Show Detail View")
}
}
}
.environmentObject(self.settings)}
}
class UserSettings: ObservableObject
{
@Published var score: Int = 0
init(_ value: Int)
{
self.score = value
}
}
您不能將值分配給VStack
內部。 您應該使用.onAppear()
。 而且您使用錯誤的方式設置environmentObject
設置您可以在其中初始化 ContentView 的environmentObject
。 像這樣
@main
struct ContentViewApp: App {
var body: some Scene {
WindowGroup {
ContentView().environmentObject(UserSettings(15))
}
}
}
struct ContentView: View {
@EnvironmentObject var settings: UserSettings // settings are initialized in AppDelegate
@State var myscore: Int = 0
var body: some View {
NavigationView {
VStack {
Text("\(settings.score)") // here score shows up correct!
.padding()
Button("Increase Score") {
settings.score += 1 // this also works
}
.padding()
NavigationLink(destination: DetailView()) {
Text("Show Detail View")
}
}
}
.onAppear {
myscore = settings.score //<=== Here
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.