我上课了
class SomeClass<T>: AsyncOperation, NetworkOperationProtocol {
/// The resource model object that conforms to Parsable Response
public typealias Resource = T
}
我想将此类的实例保存到数组中,并希望稍后检索它。 我怎样才能做到这一点?
答案 0 :(得分:0)
如果你的通用类型是:
struct GenericType {}
您可以使用以下方法指定泛型类:
let array = [SomeClass<GenericType>]()
或者您可以通过以下方式让它自己推断出类型:
class SomeClass<T>: AsyncOperation, NetworkOperationProtocol {
/// The resource model object that conforms to Parsable Response
public typealias Resource = T
let resource: Resource
init(with resource: Resource) {
self.resource = resource
}
}
let item = SomeClass(with: GenericType())
let array = [item]
答案 1 :(得分:0)
应该很简单 你可以像这样声明一个数组
var anArray = [SomeClass<Parsable>]()
请注意,在声明数组时,我已经定义了Parsable
而不是T.
如果您在创建阵列时不知道T的类型。你可以按照以下方式进行
var anArray = [AnyObject]()
let anObject = SomeClass<Parsable>()
anArray.append(anObject)
if anArray[0] is SomeClass<Parsable> {
print(true)
}
答案 2 :(得分:0)
如果你的类使用关联类型实现协议,则无法将其放入数组中,因为这些协议具有自我要求 - 他们需要知道关联类型的具体类型。
但是,您可以使用名为type-erasure的技术来存储没有相关类型信息的类型。因此,例如,您可以创建一个没有关联类型的协议,如此
protocol Operation {
func perform()
}
class SomeClass<T> : AsyncOperation, NetworkOperationProtocol, Operation
然后定义一系列此类操作:
let operations : [Operation] = []
operations.append(SomeClass.init())