Swiftui 应用程序协议不适用于视图';s预览提供程序

Swiftui 应用程序协议不适用于视图';s预览提供程序,swiftui,Swiftui,以下代码可以在ios13中使用 import SwiftUI struct ContentView: View { var body: some View { LoginView() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } 但当我尝试使用ios14功能应用程序协议时

以下代码可以在ios13中使用

import SwiftUI

struct ContentView: View {
    var body: some View {
        LoginView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
但当我尝试使用ios14功能应用程序协议时,预览报告
要求ContentView确认查看
错误

import SwiftUI

@main
struct ContentView: App {
    var body: some Scene {
        WindowGroup {
            LoginView()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这是因为在新版本中,
ContentView
不再声明为
View
,而是声明为
App
(我建议将其重命名为
ContentApp
,以避免混淆)

预览的签名为:

static var previews: some View
这意味着它需要返回一些视图(而不是一些应用程序)


在您的情况下,您可能希望在预览中显示
LoginView

struct LoginView_Previews: PreviewProvider {
    static var previews: some View {
        LoginView()
    }
}
或者,如果您想显示
ContentView

@main
struct ContentApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

struct ContentView: View {
    var body: some View {
        LoginView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这相当于命名惯例。最好不要将应用程序命名为视图(在本例中为ContentView)。。。Xcode使用不同的符号表示从模板创建。用App将入口点命名为某物,不要将其用作视图,因为它不是视图,而是App。。。。就像AppDelegate不是UIView,对吗?ContentView确认应用协议并返回一些场景,这是否意味着它不能在xcode 12中预览?