Как в swift объединить в один массив два разных класса?

Пользователь

от lamar , в категории: Swift , год назад

Как в swift объединить в один массив два разных класса?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от ransom_homenick , год назад

@lamar 

Можно использовать протокол для объединения двух классов в один массив.


Например, у вас есть классы "Person" и "Animal", которые нужно объединить в массив:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

class Animal {
    var type: String
    init(type: String) {
        self.type = type
    }
}

protocol Nameable {
    var name: String { get }
}

extension Person: Nameable {}
extension Animal: Nameable {}


Здесь мы определяем протокол "Nameable", который имеет одно свойство "name".


Затем мы расширяем классы "Person" и "Animal", чтобы они удовлетворяли этому протоколу.


Теперь мы можем создать массив классов "Person" и "Animal" и использовать его как массив типа "Nameable":

1
2
3
4
5
6
7
8
let people = [Person(name: "John"), Person(name: "Jane")]
let animals = [Animal(type: "Dog"), Animal(type: "Cat")]

let allEntities: [Nameable] = people + animals

for entity in allEntities {
    print(entity.name)
}


Здесь мы создаем массивы "people" и "animals" и затем объединяем их в массив "allEntities", который имеет тип "Nameable".


Затем мы перебираем этот массив и выводим на консоль свойство "name" для каждого элемента.