Назад к задачам
Junior — Senior
6

Какой вывод будет получен в примере №6

Компании, где спрашивали:

МТСМТС
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В этом примере показывается, как работают массивы, содержащие объекты‑ссылки, при их копировании между разными контроллерами. Создаются два наследника базового контроллера, заполняются массивы строк и массивы представлений, после чего один из массивов изменяется во втором контроллере. Затем выводятся массивы первого контроллера, чтобы увидеть, какие изменения отразились на его данных.

class MyView: CustomStringConvertible {
    let idx: UInt
    var identifier: String

    init(withIdx idx: UInt) {
        self.idx = idx
        identifier = String(idx)
    }

    var description: String {
        return "(\(idx), \(identifier))"
    }
}

class MyViewController {
    var words = [String]()
    var elements = [MyView]()
}

class FirstViewController: MyViewController {}
class SecondViewController: MyViewController {}

let firstVC = FirstViewController()
firstVC.words = ["One", "Two", "Three"]
firstVC.elements = [MyView(withIdx: 1), MyView(withIdx: 2), MyView(withIdx: 3)]

let secondVC = SecondViewController()
secondVC.words = firstVC.words
secondVC.elements = firstVC.elements

secondVC.words.popLast()
print(firstVC.words)

secondVC.elements.last?.identifier = "4"
print(firstVC.elements)