ios - 扩展 View 时 SwiftUI 预览崩溃

标签 ios swift xcode swiftui

我有一个项目需要支持旧版本的 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, *)

编辑:看来你的链接很弱。

  1. 确保 SwiftUI.framework设置为optionalBuild Phases -> Link Binary With Libraries

  2. 确保您的 @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/

相关文章:

xcode - 如何在播放时更新音频的播放时间,使用 AVAudioPlayer

ios - 如何在 Swift 中组合两个 Dictionary 实例?

ios - 我可以强制用户使用 hockeyapp 更新我的应用程序吗?

ios - 如何使用 iOS 11 和 prefersLargeTitles 为 UINavigationBar 设置背景渐变?

ios - 在键盘扩展中添加返回按钮

ios - 等待完成 block 会导致泄漏吗?

swift - UISearchController searchBar 不更新 barTintColor

iphone - 无法在 iOS 上使用非 QWERTY 键盘打字

ios - 同步使用 Firebase observeSingleEventOfType

ios - 不想按排序顺序对参数进行排序 alamofire