NavigationLink init(_:destination:) 已弃用
Posted
技术标签:
【中文标题】NavigationLink init(_:destination:) 已弃用【英文标题】:NavigationLink init(_:destination:) deprecated 【发布时间】: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: () -> Destination
初始化程序。我能以某种方式拥有一个过时的 SwiftUI 版本吗?虽然我不知道这怎么可能,因为所有这些初始化程序都来自 iOS 13。
使用 Xcode 13 编译良好。
【参考方案1】:
从 Xcode 12.5.1 (12E507) 更新到 13.2.1 (13C100) 修复了这个问题。
Xcode 12 中的 SwiftUI 源代码不包含以目标参数作为闭包类型的 NavigationLink 初始化程序; Xcode 13 做到了。
【讨论】:
以上是关于NavigationLink init(_:destination:) 已弃用的主要内容,如果未能解决你的问题,请参考以下文章