ObservableObject
来包装它们以供SwiftUI使用。视图控制器负责确定是否可以使用SwiftUI代码。
@available(iOS 13.0, iOSApplicationExtension 13.0, *)
,但是在尝试归档时得到了以下错误信息:Use of undeclared type 'View'
, Use of undeclared type 'AnyView'
等。几乎所有来自SwiftUI的东西都是如此。有什么想法吗? - Jose Santos构建阶段 → 链接二进制文件 → 添加SwiftUI.framework (状态:可选)
。最初的回答。import SwiftUI
@available(iOS 13.0, *)
struct SwiftUIView : View {
var body: some View {
Text("Hello World!")
}
}
@available(iOS 13.0, *)
struct SwiftUIView_Previews : PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
这个目标的SwiftUI预览无法工作,但是您可以添加一个名为“SwiftUI预览”的特殊目标。
等价译文:此目标的SwiftUI预览不起作用,但是您可以添加一个名为“SwiftUI预览”的特殊目标进行预览。
从非协议类型'View'继承
2)函数声明了一个不透明的返回类型,但是在其主体中没有返回语句可以推断出底层类型
3)无法将返回类型为'Text'的返回表达式转换为返回类型为'some View'
4)类型'SwiftUIView_Previews'不符合协议'PreviewProvider'
- MikeGSwiftUI.framework(状态:可选)
。我的应用程序中有很多其他视图,但这些都是使用UIKit
构建的UIView
,不需要进行任何更改。我的应用程序中没有其他预览提供程序。 - MikeG没有合理的方法来做到这一点。#available或@available允许您区分一些代码片段或整个类,但不包括应用程序本身。
您可以使用@available来消除SwiftUI结构或具有12.0部署目标的类的警告,但在这种情况下,您需要完全使用Swift UI从storyboards(.xib等)复制UI。此外,完全不同的“绑定”方法还将要求您重新实现该应用程序中的现有逻辑(无论您之前使用了什么样的架构)。任何VIPER、VIP、MVC都旨在向ViewController(View)发送一些数据更改通知,在Swift UI中,您需要使用可绑定对象。它还会导致您创建ViewModels的副本(如果您有这样的话),因为它们将是不同的。
结果?您有第二个UI实现,第二个视图模型实现,额外80%的Presenter实现(或者您使用的是什么)。只有数据库和rest管理器将被重用。如果您有非常好的架构,这是有效的。不要忘记您需要支持两个UI和逻辑分支。
有两种方法:重新开发几乎完整的应用程序以支持SwiftUI和UIKit,或者,如果您不想只支持iOS 13,则等待iOS 14发布,然后使用SwiftUI同时支持两者。