.alert按钮的.default成员缺少上下文类型错误

3

这个示例代码展示了一个按钮,当你点击它时会弹出一个警告框。

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会报告一个错误信息:无法解析成员“default”的引用,因为缺少上下文类型。我该如何修复这段代码呢?


您提供的代码已经成功编译,没有出现任何错误。Xcode 11.2.1,iOS 13.2.2。 - undefined
这段代码运行正常。 - undefined
4个回答

1
该项目中的代码在iOS模拟器和iOS设备上都可以成功构建,没有出现任何错误。Canvas模拟器也可以正常工作(我使用的是Xcode 11.2.1和iOS 13.2.2)。

enter image description here

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

在Finder中按下Cmd+Shift+G,然后前往:

~/Library/Developer/Xcode/DerivedData/

在清理此文件夹的内容后,重新构建项目,它应该按预期工作。

0

我之前遇到了这个错误信息,因为括号没有正确配对。你的代码是有效的,这些版本也都可以正常工作:

.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"))
    )
}

0

我通过实验发现,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..." 行显示了一个"未指定上下文类型的错误",针对警告按钮的 .default 成员。


0
创建我的CocoaPod时遇到的错误:
error: reference to member 'originalImage' cannot be resolved without a contextual type

解决方案:

对于我的情况,我已经更新了我自己的CocoaPods代码功能,这些功能是由Apple从Swift 5.0中提供的。但是我在说明中提到了我的Swift版本是4.0。我已经在podspec文件中将Swift版本更改为Swift 5.0。这对我来说非常有效。

spec.swift_versions = "4.0"spec.swift_versions = "5.0"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接