Swiftui 有没有一种方法可以在针对iOS 13时有条件地使用@StateObject?

Swiftui 有没有一种方法可以在针对iOS 13时有条件地使用@StateObject?,swiftui,Swiftui,我有一个针对iOS 13及更高版本的SwiftUI应用程序。如果我在iOS 14上运行,我想有条件地使用@StateObject属性包装器,因为它可以修复我在iOS 13上不得不解决的许多bug 是否有任何方法可以通过#ifdef或#如果可用(iOS 14,*)呼叫或类似方式有条件地执行此操作?我很高兴能够为iOS 14提供一个完全独立的视图实现 我尝试过这个,但它当然无法编译 struct MyView:View{ 如果可用(iOS 14,*){ @StateObject变量viewModel

我有一个针对iOS 13及更高版本的SwiftUI应用程序。如果我在iOS 14上运行,我想有条件地使用
@StateObject
属性包装器,因为它可以修复我在iOS 13上不得不解决的许多bug

是否有任何方法可以通过
#ifdef
#如果可用(iOS 14,*)
呼叫或类似方式有条件地执行此操作?我很高兴能够为iOS 14提供一个完全独立的视图实现

我尝试过这个,但它当然无法编译

struct MyView:View{
如果可用(iOS 14,*){
@StateObject变量viewModel:viewModel()
}否则{
@观察对象变量viewModel:viewModel
}

这可以使用
@available
属性来完成,如下所示:

class ViewModel:observeObject{}
@可用(iOS 14,*)
struct FourteenView:视图{
@StateObject变量viewModel=viewModel()
var body:一些观点{
文本(“iOS 14”)
}
}
结构第三视图:视图{
@ObservedObject var viewModel=viewModel()
var body:一些观点{
案文(“iOS 13”)
}
}
结构ContentView:View{
var body:一些观点{
如果可用(iOS 14,*){
AnyView(FourteenView())
}否则{
第三十视图()
}
}
}
当然,这只适用于Xcode 12。我使用的是12.0 beta 3(12A8169g)


ContentView
中的
AnyView()
是因为在
@ViewBuilder
中使用
if#available(iOS 14,*)
似乎无法正常工作。请参见此。

这可以使用
@available
属性来完成,如下所示:

class ViewModel:observeObject{}
@可用(iOS 14,*)
struct FourteenView:视图{
@StateObject变量viewModel=viewModel()
var body:一些观点{
文本(“iOS 14”)
}
}
结构第三视图:视图{
@ObservedObject var viewModel=viewModel()
var body:一些观点{
案文(“iOS 13”)
}
}
结构ContentView:View{
var body:一些观点{
如果可用(iOS 14,*){
AnyView(FourteenView())
}否则{
第三十视图()
}
}
}
当然,这只适用于Xcode 12。我使用的是12.0 beta 3(12A8169g)


ContentView
中的
AnyView()
是因为在
@ViewBuilder
中使用
if#available(iOS 14,*)
似乎无法正常工作。请参见此图。

或者,您可以使用在iOS 13上工作的此状态对象:


或者,您可以使用此在iOS 13上工作的StateObject: