SwiftUI函数返回List时出现some类型相关报错如何解决?
解决方案
核心原因
你遇到的报错是因为Swift当前的some不透明类型语法仅支持放在函数返回值的最顶层位置,不允许嵌套在泛型参数的尖括号内,你原来的写法把some DynamicViewContent放在了List的泛型参数位置,不符合语法规则。
你之前拆分视图返回some View的写法是完全正确的,返回List的场景直接沿用这个逻辑即可,不需要显式声明List的具体泛型类型:
func itemsList() -> some View { List { // 此处编写列表原有内容,例如ForEach等逻辑 ForEach(items) { item in Text(item.name) } } }
这个写法完全符合你拆分视图优化代码的习惯,运行不会有任何问题,和你之前写deleteButton的逻辑完全一致。
特殊场景的替代方案
如果你确实有需要保证该函数的返回值是List类型(而非通用的View类型),可以用泛型函数的方式实现,不过这个方案日常开发极少用到:
func itemsList<Content: DynamicViewContent & View>() -> List<Never, Content> { List { // 列表内容逻辑 } as! List<Never, Content> }
错误尝试的说明
- 去掉
some直接返回DynamicViewContent类型会报错:因为DynamicViewContent是协议类型,不能直接作为泛型的具体参数使用,Swift泛型要求传入具体的实现类型。 - 直接声明返回
List的完整泛型类型需要你明确写出两个泛型参数的具体类型,手写成本极高,完全没有必要。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

