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

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

我正在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(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)
      }
    }
  }