我有一个小例子
items.append(Item(value: "A", id: index))
失败,并显示:
型别'Item'没有成员'init'
我不明白问题所在你能帮忙吗
struct Model<Item> where Item: Equatable {
var items = Array<Item>()
init(){
items.append(Item(value: "A", id: index))
}
}
struct Item: Identifiable, Equatable {
static func == (lhs: Item, rhs: Item) -> Bool {
return lhs.id == rhs.id
}
var value: any Equatable
var id: Int
}
1条答案
按热度按时间xytpbqjk1#
发生错误的原因是泛型类型
Item
与结构Item
没有任何关系,并且编译器将Item
视为没有初始值设定项的泛型类型。当您在
init
方法中附加具体类型Item
时,泛型类型是没有意义的。这实际上与
为了澄清这个问题,这是一个具有不同类型名称的泛型方法
当然,这会引发编译器错误
无法将类型'Item'的值转换为预期的参数类型'M'
您可以转换类型
但这使得泛型类型变得毫无意义--如上所述--因为现在
M
等于静态Item
,如果您试图指定另一个类型您将得到一个运行时错误
无法将类型“__lldb_expr_1.Item”(0x 104 dc 0118)的值强制转换为“Swift.String”(0x 1f 7 c94 ab 8)。
从而导致崩溃。