【问题标题】:NavigationLink init(_:destination:) deprecatedNavigationLink init(_:destination:) 已弃用
【发布时间】:2022-01-20 00:07:21
【问题描述】:

NavigationLink 的初始化器

init<S>(_ title: S, destination: Destination) where S : StringProtocol

已弃用,仅适用于 iOS 13.0–15.2。替换是

init<S>(_ title: S, destination: () -> Destination) where S : StringProtocol

根据文档:https://developer.apple.com/documentation/swiftui/navigationlink/init(_:destination:)-6hslu

将我现有的代码替换为

NavigationLink("MyTitle") {
    Text("MyView")
}

显示错误

Type '() -> Text' cannot conform to 'View'

我使用推荐的初始化器有什么问题?

编辑 1: Xcode 版本 12.5.1 (12E507)

【问题讨论】:

  • 该代码对我来说编译得很好。清除派生数据?重启 Xcode?​​span>
  • 没用,很遗憾。
  • 有趣。您确定这发生在干净的环境中(即尝试将其粘贴到空白 Xcode 项目中)吗?也许它受到某种周围代码的影响。
  • 是的,我就是这样测试的。奇怪的是 NavigationLink 的 SwiftUI 源代码只显示了 destination: Destination 的初始化程序,而没有显示 destination: () -&gt; Destination 初始化程序。我能以某种方式拥有一个过时的 SwiftUI 版本吗?虽然我不知道这怎么可能,因为所有这些初始化程序都来自 iOS 13。
  • 使用 Xcode 13 编译良好。

标签: ios swift swiftui swiftui-navigationlink


【解决方案1】:

从 Xcode 12.5.1 (12E507) 更新到 13.2.1 (13C100) 修复了这个问题。

Xcode 12 中的 SwiftUI 源代码不包含以目标参数作为闭包类型的 NavigationLink 初始化程序; Xcode 13 做到了。

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2017-05-02
    • 2021-11-02
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多