代码之家  ›  专栏  ›  技术社区  ›  Ameen Izhac

如何修复Swift Screen Time API错误:类型为“Button<Text>”的值没有成员“familyActivityPicker”

  •  0
  • Ameen Izhac  · 技术社区  · 11 月前

    我一直在遵循WWDC 21中关于如何使用屏幕时间API的教程。本教程提供了以下代码:

    import FamilyControls
    import SwiftUI
    
    @StateObject var model = MyModel()
    @State var isPresented = false
    
    var body: some View {
        Button("Select Apps to Discourage") {
            isPresented = true
        }
        .familyActivityPicker(isPresented: $isPresented, 
                              selection: $model.selectionToDiscourage)
    }
    

    我尝试在我的应用程序中使用它:

    import SwiftUI
    import SwiftData
    import FamilyControls
    
    struct AppSelectionButton: View {
        @Binding var isPresented: Bool
        @ObservedObject var model: MyModel
    
        var body: some View {
            Button("Select Apps to Discourage") {
                isPresented = true
            }
            .familyActivityPicker(isPresented: $isPresented,
                                  selection: $model.selectionToDiscourage)
        }
    }
    
    class MyModel: ObservableObject {
        @Published var selectionToDiscourage: FamilyActivitySelection
    
        init() {
            self.selectionToDiscourage = FamilyActivitySelection()
        }
    }
    

    但当我这样做时,我得到了错误“Button类型的值没有成员familyActivePicker”。

    我也试过:

    struct ExampleView: View {
        @@Published var selection = FamilyActivitySelection()
    
        var body: some View {
            VStack {
                Image(systemName: "eye")
                    .font(.system(size: 76.0))
                    .padding()
    
                FamilyActivityPicker(selection: $selection)
    
                Image(systemName: "hourglass")
                    .font(.system(size: 76.0))
                    .padding()
            }
            .onChange(of: selection) { newSelection in
                let applications = selection.applications
                let categories = selection.categories
                let webDomains = selection.webDomains
            }
        }
    }
    

    但它仍然不起作用。

    我的目标是iOS 18.1。

    是什么导致了这个错误?

    1 回复  |  直到 11 月前
        1
  •  1
  •   workingdog support Ukraine    11 月前

    试试这个示例代码。另请参见 FamilyActivityPicker

    class MyModel: ObservableObject {
        @Published var selectionToDiscourage = FamilyActivitySelection()
    }
    

    以下是我的完整测试代码:

    import FamilyControls
    import SwiftUI
    
    struct ContentView: View {
        @StateObject private var model = MyModel()
        @State private var isPresented = false
        
        var body: some View {
            Button("Select Apps to Discourage") {
                isPresented = true
            }
            .familyActivityPicker(isPresented: $isPresented,
                                  selection: $model.selectionToDiscourage)
            
         //   AppSelectionButton(isPresented: $isPresented, model: model)
        }
    }
    
    struct AppSelectionButton: View {
        @Binding var isPresented: Bool
        @ObservedObject var model: MyModel
        
        var body: some View {
            Button("Select Apps to Discourage") {
                isPresented = true
            }
            .familyActivityPicker(isPresented: $isPresented,
                                  selection: $model.selectionToDiscourage)
        }
    }
    
    class MyModel: ObservableObject {
        @Published var selectionToDiscourage = FamilyActivitySelection()
    }
    

    MacOS 15.3,使用Xcode 16.2,目标为iOS-18,在真实的iOS设备上进行了测试。