SwiftUI“ Hello World”可在iOS上运行,但不适用于MacOS。
尝试构建一个简单的“ Hello World” SwiftUI示例以查看其在Mac上的工作方式,但是我得到了一个空的黑屏应用程序。
我正在使用Xcode 11 MacOS目标已检查 MacOS版本10.15 Beta(19A471t)
import SwiftUI
struct ContentView : View {
var body: some View {
VStack {
Toggle(isOn: /*@START_MENU_TOKEN@*/.constant(true)/*@END_MENU_TOKEN@*/) {
Text(/*@START_MENU_TOKEN@*/"Toggle"/*@END_MENU_TOKEN@*/)
}
Stepper(value: /*@START_MENU_TOKEN@*/.constant(4)/*@END_MENU_TOKEN@*/, in: /*@START_MENU_TOKEN@*/1...10/*@END_MENU_TOKEN@*/) {
/*@START_MENU_TOKEN@*/Text("Stepper")/*@END_MENU_TOKEN@*/
}
Text("Hello World")
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
答案 0 :(得分:5)
这是Xcode 11 Beta Release Notes中提到的已知问题:
Xcode 11 Beta不支持在项目中使用SwiftUI 配置为使用Mac版UIKit。
因此,我们唯一的选择就是等待下一个Xcode 11 beta版本。
更新:这适用于Xcode 11.0 beta 2。
答案 1 :(得分:1)
现在可以使用Xcode 11 beta 2了:
Xcode 11 beta支持使用SwiftUI进行开发。
请注意,由Beta 1创建的骨架应用程序(通过“新建项目”菜单创建)将无法使用。您需要使用Beta 2创建的版本。
答案 2 :(得分:1)
答案 3 :(得分:0)
虽然众所周知的问题是缺少对Xcode 11 beta 1的支持,但是您可以通过在SceneDelegate willConnectTo
方法中更改场景设置来启用它:
#if targetEnvironment(UIKitForMac)
let windowScene = UIWindowScene(session: session, connectionOptions: connectionOptions)
let window = UIWindow(windowScene: windowScene)
#else
let window = UIWindow(frame: UIScreen.main.bounds)
#endif
window.rootViewController = UIHostingController(rootView:
ContentView()
.environmentObject(TimersStore.shared)
.environmentObject(SettingsStore.shared)
)
我保护了此代码,因为由于某些原因,如果您在iOS / iPadOS目标上使用UIWindowScene,它将导致键盘不再出现并且文本输入不起作用。在macOS上运行的应用程序也是如此,但是您至少可以检查一下应用程序的外观/运行方式。
答案 4 :(得分:0)
现在在SwiftUI中这非常容易:
import SwiftUI
struct ContentView: View {
#if targetEnvironment(macCatalyst)
var body: some View {
Text("Hello, Mac!")
}
#else
var body: some View {
Text("Hello, iOS!")
}
#endif
}
确保在“部署信息”目标中选中了“ Mac”。