Swift 警报按钮的默认成员没有上下文类型错误
此示例代码显示单击按钮时表示警报的按钮Swift 警报按钮的默认成员没有上下文类型错误,swift,swiftui,Swift,Swiftui,此示例代码显示单击按钮时表示警报的按钮 struct LoginView: View { ... @State private var showAlert = false var body: some View { NavigationView { VStack { ... Button("Login") { self.sho
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")
}
}
}
但是,当我编译此代码时,如果没有上下文类型的错误消息,则无法解析对成员“default”的引用。如何修复此代码?提供代码的项目在
iOS模拟器
和iOS设备
中构建良好,没有任何错误<代码>画布模拟器也可以正常工作(我使用了Xcode 11.2.1和iOS 13.2.2)
尝试删除文件夹中的所有编译项目DerivedData
在Finder中,按Cmd-Shift-G并转到:
~/Library/Developer/Xcode/DerivedData/
清理此文件夹的内容后,再次构建项目,它必须按预期工作。我通过实验发现,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(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"))
)
}
您提供的代码生成时没有错误。Xcode 11.2.1,iOS 13.2.2。此代码运行良好。