我有一个项目需要支持旧版本的 iOS,并且我正在尝试使用 SwiftUI 来获取仅在用户使用 iOS 13 或更高版本时才会出现的 View 。 Xcode 中的 SwiftUI Preview 工作得很好,但是当我扩展 SwiftUI 结构(例如 View)时,该项目将在设备上编译并运行,但 Preview Canvas 崩溃,指出它 Failed to build myView.swift
。当我点击“诊断”按钮时,它告诉我“查看”仅在 iOS 13.0 或更高版本中可用
,并且将 @available 属性添加到封闭扩展
。但是,相关扩展程序前面已经有 @available(iOS 13.0, *)
。例如:
@available(iOS 13.0, *)
extension View {
func myFunc() {
}
}
为了找到此问题的根源,我注意到如果预览完全为空,则预览不会崩溃。只有当我向其中添加函数或静态属性时, Canvas 才会崩溃。我还尝试在扩展程序中的每个函数之前添加 @available
行,重新启动计算机并删除 DerivedData 文件夹,但似乎没有什么区别。
最佳答案
您不需要@available(iOS 13.0, *)
您的应用程序将无法在低于版本 13.0
的任何设备上运行所以基本上错误表明这是多余的。删除它应该可以解决您的问题。
但是,如果您正在执行 SwiftUI 弱链接并且存在此问题,那么它是 xCode 的一个已知错误。如果没有弱链接,请删除 @available(iOS 13.0, *)
编辑:看来你的链接很弱。
确保
SwiftUI.framework
设置为optional
在Build Phases -> Link Binary With Libraries
确保您的
@available(iOS 13.0, *)
就在你的body
之上不在您的扩展之上
示例:
struct TestView2: View {
@available(iOS 13.0, *)
var body: some View {
Text("test")
}
}
extension TestView2 {
func abc() {
}
}
struct TestView2_Previews: PreviewProvider {
@available(iOS 13.0, *)
static var previews: some View {
TestView2()
}
}
关于ios - 扩展 View 时 SwiftUI 预览崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62313443/