Swift中如何在自定义初始化器中向ModelContainer(for:)传可变参数?
解决Swift中PersistentModel初始化器的Variadic参数错误
错误原因分析
- 第一个错误:你将
any PersistentModel.Type...类型的可变参数数组直接传递给另一个同类型的可变参数,Swift要求必须显式展开数组才能匹配可变参数的输入形式。 - 第二个错误:Swift 5.7及以后版本规定,将协议作为具体类型使用时必须添加
any关键字,因此不能直接移除any。
解决方案
在传递参数给ModelContainer初始化器时,使用**展开运算符***将可变参数数组拆分为独立参数:
init(for forTypes: any PersistentModel.Type...) { container = try? ModelContainer(for: *forTypes) }
补充说明
如果ModelContainer提供了接受数组类型参数的初始化器(如init(for: [any PersistentModel.Type])),也可以直接传递数组:
init(for forTypes: any PersistentModel.Type...) { container = try? ModelContainer(for: forTypes) }
两种方式都能解决你的问题,选择哪种取决于你使用的SwiftData版本和初始化器的可用形式。
内容的提问来源于stack exchange,提问作者Klim Postironin
相关产品推荐
相关产品推荐

