【问题标题】:Swift : cannot convert return expression of any view to return type some viewSwift:无法将任何视图的返回表达式转换为某个视图的返回类型
【发布时间】: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 时,构建运行。但我不知道为什么

标签: swift swiftui swift5.2


【解决方案1】:

我整天都在摆弄同样的错误。正常构建/运行时没有问题。这很奇怪。我什至尝试在我的视图中注释掉几乎所有代码,除了一小段代码,我仍然遇到.font(.title) 的问题。令人惊讶的是,如果我尝试在新项目中运行相同的代码,没问题。此外,如果我只是注释掉设置字体类型的那一行,预览就会编译并显示出来。

而且所报告的错误基本上是无意义的,它们甚至不在正确的行上。

所以我猜预览功能仍然充满了错误。希望它尽快改善。感觉就像 Swift 的最初推出,人们开始采用和使用它的速度比 Apple 修复它的速度要快。或者更确切地说,Swift 可能在工具准备好之前就发布了。似乎与 SwiftUI 的情况相同。

【讨论】:

  • .foregroundColor(_:).font(_:) 有同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2017-02-10
相关资源
最近更新 更多