【问题标题】:The without a contextual type error for .default member of alert button警报按钮的 .default 成员没有上下文类型错误
【发布时间】:2020-03-12 20:25:03
【问题描述】:

此示例代码显示一个按钮,当您单击它时表示一个警报。

struct LoginView: View {
    ...
    @State private var showAlert = false

    var body: some View {
        NavigationView {
            VStack {
                ...

                Button("Login") {
                    self.showAlert = true
                }
                .alert(isPresented: self.$showAlert) {
                    Alert(title: Text("Login error"), message: Text("detail message"), dismissButton: .default(Text("Ok")))  // this line report a error
                }
            }
            .navigationBarTitle("Login View")
        }
    }
}

但是当我编译这段代码时,Xcode 会报告Reference to member 'default' cannot be resolved without a contextual type 错误消息。我应该如何修复此代码?

【问题讨论】:

  • 您提供的代码构建没有错误。 Xcode 11.2.1,iOS 13.2.2。
  • 这段代码运行良好。

标签: swift swiftui


【解决方案1】:

提供代码的项目在iOS SimulatoriOS device 中构建良好,没有任何错误。 Canvas Simulator 也可以正常工作(我使用 Xcode 11.2.1 和 iOS 13.2.2)。

尝试删除文件夹DerivedData中所有已编译的项目。

在 Finder 中按 Cmd-Shift-G 并转到:

~/Library/Developer/Xcode/DerivedData/

清理此文件夹的内容后,再次构建您的项目,它必须按预期工作。

【讨论】:

    【解决方案2】:

    我通过实验发现 Xcode 提供了这种愚蠢的行为,因为在另一条代码路径中存在编译问题(它显示了您有但未到位的编译错误,这是此错误的根源)。

    接下来是我的解决方案:

    1) 评论里面的所有内容

    public var body: some View {
       . . . . . 
    }
    

    2) 成功构建项目

    3) 逐个视图取消注释。每次取消注释后成功构建将帮助您找到真正错误的地方

    例如,我遇到了 sendRequest 功能问题

    Button(
            action: {
    
                self.sendRequest(requestUrl: self.requestUrl!, requestData: self.requestData!, requestMethod: RequestMethod.GET, handler: { rd, sa, am in
                                            self.responseData = rd
                                            self.showingAlert = sa ?? false
                                            self.alertMessage = am
                                        })
    
            },
            label: { Text("Get Data") }
           )
           .alert(isPresented: $showingAlert) {
               Alert(title: Text("Important!"), message: Text("\(alertMessage!)"), dismissButton: .default(Text("Got it!")))
           }
           .buttonStyle()
    

    Xcode 在“Alert...”行显示“The without a contextual type error for .default member of alert button”错误

    【讨论】:

      【解决方案3】:

      我收到此错误消息是因为括号未正确配对。您的代码有效,这些版本也有效:

      .alert(isPresented: $showAlert) {
          Alert(title: Text("Title"),
                message: Text("An alert"),
                primaryButton: .default(Text("OK"), action: {
                }),
                secondaryButton: .cancel(Text("Cancel"), action: {
                })
          )
      }
      

      或者这个:

      .alert(isPresented: $showAlert) {
          Alert(title: Text("Title"),
                message: Text("An alert"),
                primaryButton: .default(Text("OK")) {
                },
                secondaryButton: .cancel(Text("Cancel"))
          )
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多