【发布时间】:2019-10-29 11:44:29
【问题描述】:
我在这里关注 WWDC2019 的会议:
https://developer.apple.com/videos/play/wwdc2019/216/
我有以下代码用于使用 SwiftUI 创建 TabbedView:
//第 1 节 |内容视图(我的)---------------
import SwiftUI
struct ContentView : View {
var body: some View {
NavigationView {
TabbedView(selection: .constant(1)) {
PlaceForm().tabItemLabel(Text("Tab1")).tag(1)
FavoritesForm().tabItemLabel(Text("Tab2")).tag(2)
}
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
//--------------- 以上产生了以下选项卡式视图:
但是,在 WWDC2019 会议中,使用了以下代码:
//第 2 节 | ContentView(苹果的)---------------
import SwiftUI
struct ContentView : View {
var body: some View {
NavigationView {
TabbedView(selection: .constant(1)) {
PlaceForm().tabItemLabel {
Image(systemName: "square.and.pencil")
Text("Tab1")
}
FavoritesForm().tabItemLabel {
Image(systemName: "clock.fill")
Text("Tab2")
}
}
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
//---------------------------
但是,在 Xcode11Beta 上,这会导致 Xcode11Beta 引发以下编译器错误
Cannot convert value of type 'TabbedView<Int,
TupleView<(_ModifiedContent<PlaceForm, _TraitWritingModifier<AnyView?>>,
_ModifiedContent<FavoritesForm, _TraitWritingModifier<AnyView?>>)>>' to
closure result type '_'
和
//---------------------------
如果 WWDC2019 演示文稿中的信息正确,为什么 WWDC2019 幻灯片中演示的代码不会导致图像显示在选项卡式视图的选项卡中?
此外,使用 section1 中的代码,将选项卡切换到 tab2 会显示一个空白视图,如以下问题所述:
SwiftUI TabbedView only shows first tab's content
请注意PlaceForm和FavoritesForm的内容转载如下
//第 3 节 | PlaceForm---------------
import SwiftUI
struct PlaceForm : View {
var body: some View {
List {
VStack {
MapView()
.edgesIgnoringSafeArea(.top)
.frame(height: 300)
CircleImage()
.offset(y: -130)
.padding(.bottom, -130)
VStack {
VStack {
Text("Turtle Rock")
.font(.title)
.color(.black)
}
HStack {
Text("Joshua Tree National Park")
.font(.subheadline)
Spacer()
Text("California")
.font(.subheadline)
}
}
.padding()
}
}.listStyle(.grouped)
}
}
#if DEBUG
struct PlaceForm_Previews : PreviewProvider {
static var previews: some View {
PlaceForm()
}
}
#endif
//第 4 节 |收藏表格---------------
import SwiftUI
struct FavoritesForm : View {
var body: some View {
List {
VStack {
MapView()
.edgesIgnoringSafeArea(.top)
.frame(height: 300)
CircleImage()
.offset(y: -130)
.padding(.bottom, -130)
VStack {
VStack {
Text("Ninja Rock")
.font(.title)
.color(.black)
}
HStack {
Text("Joshua Tree National Park")
.font(.subheadline)
Spacer()
Text("California")
.font(.subheadline)
}
}
.padding()
}
}.listStyle(.grouped)
}
}
#if DEBUG
struct FavoritesForm_Previews : PreviewProvider {
static var previews: some View {
FavoritesForm()
}
}
#endif
【问题讨论】:
-
在 WWDC 上完成的许多演示将使用早期或更新版本的 Xcode 和 Swift。所以他们展示了很多不起作用的东西。
-
我正在使用他们声称在演示中使用的 Xcode 和 Swift5 版本,即 Xcode11 和 Swift5。我觉得我被苹果骗了。
-
这有点过于戏剧化了。没有人在骗你。您正在使用测试版软件。它仍在开发中。它会随着你的使用而改变。当您决定开始使用他们的测试版软件时,这就是您所接受的。
-
WWDC 演讲者在舞台上使用测试工具的第二个种子并不少见。他们今年没有提到它,但从他们展示的东西中可以清楚地看出,直到 beta 2 才可用(特别是 SwiftUI 中的 Form 元素有大部分时间专门用于它,而 beta 1 中没有它)。这是正常的。
标签: swift swiftui swift5 xcode11