我有一个针对iOS 13及更高版本的SwiftUI应用。@StateObject
如果我在iOS 14上运行,我想有条件地使用属性包装器,因为它可以修复许多我不得不在iOS 13上解决的错误。
有什么办法可以通过#ifdef
,#if available(iOS 14, *)
致电或类似方式有条件地做到这一点吗?我很高兴能为iOS 14完全独立实现给定视图。
我已经尝试过了,但是它当然不会编译。
struct MyView: View {
if #available(iOS 14, *) {
@StateObject var viewModel: ViewModel()
} else {
@ObservedObject var viewModel: ViewModel
}
可以使用如下@available
属性来完成:
class ViewModel: ObservableObject {}
@available(iOS 14, *)
struct FourteenView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
Text("iOS 14")
}
}
struct ThirteenView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
Text("iOS 13")
}
}
struct ContentView: View {
var body: some View {
if #available(iOS 14, *) {
AnyView(FourteenView())
} else {
ThirteenView()
}
}
}
当然,这仅适用于Xcode 12。我正在使用12.0 beta 3(12A8169g)。
在AnyView()
在ContentView
是因为使用if #available(iOS 14, *)
中@ViewBuilder
似乎没有正常工作。请参阅此Apple开发者论坛线程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句