У меня есть базовый класс ItemBase
и класс CollectionBase
с товарами типа ItemBase
.Свифт: Коллекция общих коллекций
Я получаю два класса из этого ItemBase
- PersonItem
и AnimalItem
.
Я получаю два класса от CollectionBase
с соответствующими товарами - PersonCollection
и AnimalCollection
.
И затем я создаю массив типа CollectionBase
- ItemBase
.
Теперь я хочу добавить к PersonCollection
и AnimalCollection
в массив, но я получаю следующее сообщение об ошибке:
"Cannot assign value of type 'PersonCollection' to type 'DataCollection"
Как я могу определить сбор-массив, что я могу добавить элементы, основанные на CollectionBase
- ItemBase
?
class ItemBase {
}
class CollectionBase<T: ItemBase> {
var Items = [T]()
}
class PersonItem: ItemBase {
}
class PersonCollection: CollectionBase<PersonItem> {
}
class AnimalItem: ItemBase {
}
class AnimalCollection: CollectionBase<AnimalItem> {
}
var collection = [CollectionBase<ItemBase>]()
// Error: Cannot assign value of type 'PersonCollection' to type 'DataCollection<ItemBase>
collection.append(PersonCollection())
// Error: Cannot assign value of type 'AnimalCollection' to type 'DataCollection<ItemBase>
collection.append(AnimalCollection())
В примере класс CollectionBase пуст, но класс обладает гораздо большей функциональностью. Поэтому мне это нужно. – Gerald
Я добавил дополнительный вариант ответа. – Darko
Спасибо Darko, но мне нужна PersonCollection и AnimalCollection в одной коллекции ... Я также думаю, что это невозможно. Я искал последние дни для решения, и этот пост - моя последняя надежда. – Gerald