如何处理Swift UI版本兼容以支持旧设备



我正在Xcode 12测试版WatchOS 7上开发一个苹果手表应用程序。

我也打算支持watchOS6。

以下代码有错误,我不知道如何处理,它属于SwiftUI问题:

struct CompactStockListView: View {
var body: some View {
NavigationView {
List(getStocks(), id: .id) { stock in
CompactStockRowView(stock: stock)
.padding(.vertical, 6)
}
.navigationBarTitle(Text("Landmarks"))
}
}
}

Xcode注意到错误:

"NavigationView"仅在watchOS 7.0或更新版本的应用程序扩展中可用

下一步:尝试这种解决方案没有成功:

struct CompactStockListView: View {
var body: some View {
getListSafe() // Error
}

func getListSafe() -> View {  // Error tooo
if #available(watchOSApplicationExtension 7.0, *) {
return NavigationView {
List(getStocks(), id: .id) { stock in
CompactStockRowView(stock: stock)
.padding(.vertical, 6)
}
.navigationBarTitle(Text("Landmarks"))
}
} else {
// Fallback on earlier versions
return List(getStocks(), id: .id) { stock in
CompactStockRowView(stock: stock)
.padding(.vertical, 6)
}
}
}
}

尝试以下

@ViewBuilder
func getListSafe() -> some View {
if #available(watchOSApplicationExtension 7.0, *) {
NavigationView {
List(getStocks(), id: .id) { stock in
CompactStockRowView(stock: stock)
.padding(.vertical, 6)
}
.navigationBarTitle(Text("Landmarks"))
}
} else {
// Fallback on earlier versions
List(getStocks(), id: .id) { stock in
CompactStockRowView(stock: stock)
.padding(.vertical, 6)
}
}
}

最新更新