Swiftui 如何处理兼容Swift UI版本以支持旧设备?
我正在Xcode 12 beta WatchOS 7上开发一款apple watch应用程序 我也打算支持watchOS 6 下面的代码有错误,我不知道如何处理,它属于SwiftUI问题:Swiftui 如何处理兼容Swift UI版本以支持旧设备?,swiftui,watchos,watchos-6,version-compatibility,Swiftui,Watchos,Watchos 6,Version Compatibility,我正在Xcode 12 beta WatchOS 7上开发一款apple watch应用程序 我也打算支持watchOS 6 下面的代码有错误,我不知道如何处理,它属于SwiftUI问题: struct CompactStockListView: View { var body: some View { NavigationView { List(getStocks(), id: \.id) { stock in CompactStockRowView(s
struct CompactStockListView: View {
var body: some View {
NavigationView {
List(getStocks(), id: \.id) { stock in
CompactStockRowView(stock: stock)
.padding(.vertical, 6)
}
.navigationBarTitle(Text("Landmarks"))
}
}
}
请注意错误:
“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)
}
}
}