【发布时间】:2020-07-10 03:21:58
【问题描述】:
我不知道我有什么错误:无法将任何视图的返回表达式转换为返回类型某些视图
我尝试了一些东西,但没有任何效果......我在网上找不到任何东西
感谢您的帮助...
struct LoginView: View {
@Binding var showCreateAccount: Bool
@State private var email = ""
@State private var password = ""
@State private var formOffset: CGFloat = 0
@State private var presentPasswordRecoverySheet = false
var body: some View {
VStack {
VStack(spacing: 40) {
Image("Logo")
Text("Login").font(.title).bold()
VStack {
RoundTextfield(value: self.$email, placeholder: "Email", icon: Image(systemName: "at"),
onEditingChanged: { flag in withAnimation { self.formOffset = flag ? -150 : 0 } })
RoundTextfield(value: self.$password, placeholder: "Password", icon: Image(systemName: "lock"), isSecure: true,
onEditingChanged: { flag in withAnimation { self.formOffset = flag ? -150 : 0 } })
BasicButton(text: "Login") {}
}
Button(action: { withAnimation(.spring() ) { self.showCreateAccount.toggle() } } )
{
HStack { Text("Don't have an account? Sign up.").accentColor(Color.accentColor) }
}
Button(action: { self.presentPasswordRecoverySheet.toggle() } )
{
HStack { Text("Forgot your password?").accentColor(Color.purple) }
}
.sheet(isPresented: self.$presentPasswordRecoverySheet)
{ RecoverPasswordView(presentPasswordRecoverySheet: self.$presentPasswordRecoverySheet) }
}
.padding()
.offset(y: self.formOffset)
}
}
这是我的 BasicButton 代码,但我认为这不是问题
struct BasicButton: View {
var text = "Next"
var action: (()->()) = {}
var body: some View {
Button(action: {
self.action()
}) {
HStack {
Text(text)
.bold()
.frame(minWidth: 0, maxWidth: .infinity)
.padding(.vertical)
.accentColor(Color.white)
.background(Color("accentColor"))
.cornerRadius(30)
}
}
}
}
struct BasicButton_Previews: PreviewProvider {
static var previews: some View {
BasicButton()
}
当我删除创建帐户和忘记密码的两个按钮功能时,代码可以构建
【问题讨论】:
-
将此视图的各个部分移动到子视图中,直到它将您指向错误的确切位置。我怀疑它与 RoundTextfield 和 BasicButton 有关,因为它们不是标准类型,您还没有展示它们的实现。我对您问题中的“任何观点”一词非常怀疑,因为这看起来不像 Swift 通常打印的错误(尽管编译器发生了一些变化,我之前可能没有看到这个错误)。这正是错误信息吗?
-
是的,这正是错误消息:无法将“AnyView”类型的返回表达式转换为“某些视图”类型 ----------------- ----------------------- CompileDylibError:无法构建 LoginView.swift 编译失败:无法将“AnyView”类型的返回表达式转换为“某些视图”类型/Users/kevin/Desktop/WorkIn/WorkIn/Authentification/LoginView.swift:24:10:错误:无法将“AnyView”类型的返回表达式转换为“某些视图”AnyView(VStack { ^~~~~~~ ~~~~~~~~~
-
“AnyView”与“任何视图”并不完全相同。这正是我所期望的差异。 (“任何视图”都需要一个已经提出的新功能,但我认为还没有实现。)
-
听起来你在删除东西方面取得了很好的进展,然后它就构建起来了。不断删除和添加内容,直到找到触发问题的最小代码。然后以我们可以在操场上运行的方式发布该代码(尽管通常在您这样做时,您会发现自己的错误。)在没有实际向我们展示代码的情况下,我们只是在猜测,即对我们任何人都没有用。
-
我发现:当我删除 loginView 上两个按钮的两个 .accentColor 时,构建运行。但我不知道为什么