SwiftUI中能否在NavigationLink内调用视图?代码报错求解
你遇到的问题源于SwiftUI编译器在匹配NavigationLink初始化器时的类型推断歧义:
第一种写法
NavigationLink(NavLink(mission: mission), value: mission)中,你直接将NavLink实例作为第一个参数传递,而NavigationLink存在多个重载初始化器(比如旧版接收destination和label的重载、新版配合navigationDestination接收value和label闭包的重载等)。编译器需要遍历所有可能的重载进行类型匹配,这个过程会触发复杂的推断逻辑,最终导致类型检查超时。第二种写法
NavigationLink {} label: {NavLink(mission: mission)}明确指定了label参数的闭包形式,编译器能直接定位到配合navigationDestination使用的目标重载,因此可以正常编译。
如果你想保留配合navigationDestination的写法,只需将NavLink放在label的闭包中,并明确传递value参数即可修复问题,正确写法如下:
// 推荐写法:闭包作为label,配合value参数 NavigationLink(value: mission) { NavLink(mission: mission) } // 或者显式指定参数标签 NavigationLink(label: { NavLink(mission: mission) }, value: mission)
这样能消除类型推断的歧义,让编译器快速完成检查,同时符合navigationDestination的使用规范。
内容的提问来源于stack exchange,提问作者user17852191
相关产品推荐
相关产品推荐

