我如何为ModelProto
这样的协议创建通用类,我尝试过这种方法,但是它不起作用
protocol ItemProto {
}
protocol ModelProto {
var list: [ItemProto]? { get }
}
class Model<I: ItemProto>: ModelProto { // <-- ERROR !!!
// Type 'Model<I>' does not conform to protocol 'ModelProto'
// Do you want to add protocol stubs?
// var list: [ItemProto]?
var list: [I]? = nil // whay this line not conform? and how fix it?
}
我可以做这样的事情
var list: [ItemProto]? {
get { return __list__ }
}
private var __list__: [I]?
但是我认为这是一个不好的方法。有帮助吗?
协议ModelProto
不具有不通用性
class Model<I>
必须必须使用<I>
类方法才能将新项目构建为<I>
答案 0 :(得分:0)
不要对Model使用通用结构:
protocol ItemProto { }
protocol ModelProto {
var list: [ItemProto]? { get }
}
class Model {
var list: [ItemProto]? = nil
}
您将能够存储符合ItemProto的任何对象。
答案 1 :(得分:0)
我们用关键字I定义了一个通用类,这意味着我ItemProto
确认了ModelProto
协议,但是在list
中您将ItemProto
定义为{{1 }}而不是I
classType,因此编译器不会编译它。
您需要在ModelProto
中定义一个类型,并将其直接用于ItemProto
:
protocol ModelProto {
associatedtype ItemType: ItemProto
var list: [ItemType]? { get }
}
现在,您告诉编译器,我得到了一个Type
确认的ItemProto
,因此您的ModelProto
现在是通用协议。