为什么我的 Widget 找不到我的应用程序可以在 SwiftUI 中看到和找到的 Class?

Why my Widget can not find my Class which my App could see and find it in SwiftUI?

我正在尝试向我的 Widget 提供来自 class 的信息,但出于未知原因,Widget 无法查看和找到 Class!这是我的 class:

import SwiftUI

class AppColor: ObservableObject {
    
    static let shared: AppColor = AppColor()
    @Published var color: Color = Color.red
    
}

这是我的内容视图:

import SwiftUI

struct ContentView: View {
    
    @StateObject var appColor: AppColor = AppColor.shared

    var body: some View {

        ZStack {
            
            appColor.color.ignoresSafeArea()
            
            Button(action: {

                if appColor.color == Color.red {
                    
                    appColor.color = Color.yellow
                    
                }
                else {
                    
                    appColor.color = Color.red
                    
                }

            }) {
                Text("change Color")
                    .foregroundColor(Color.black)
                    .bold()
            }
  
        }
        
  
    }
}

这是我的小部件:

struct testWidgetEntryView : View {
    var entry: Provider.Entry
    
    @StateObject var appColor: AppColor = AppColor.shared

    var body: some View {
        
        appColor.color
        
    }
}

这是我在应用程序中的文件位置:

即使文件可能在同一个项目中,它们也可以属于不同的目标

创建小部件扩展时,您还会创建一个新目标。如果你想在某个目标中使用一个特定的文件,你需要添加它到这个目标。

您可以从右侧面板进行更改:File Inspector -> Target Membership

确保选中要在小部件中使用的文件的小部件目标选项。


另请注意,应用程序及其扩展程序是不同的进程。这意味着如果您在主应用程序中更改 appColor,它 不会在小部件中更改

您查看此 post 了解更多信息:

  • Share data between main App and Widget in SwiftUI for iOS 14