Последняя строка не вызывает удаление: у popLast отсутствуют (). Для mutating-метода попытка использовать его как значение также может быть ошибкой компиляции.
Что будет выведено в примере №8
Последняя строка не вызывает удаление: у popLast отсутствуют (). Для mutating-метода попытка использовать его как значение также может быть ошибкой компиляции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В примере создаются два наследника базового контроллера, заполняются массивы строк и объектов, после чего один контроллер получает ссылки на массивы другого. Затем вызывается метод удаления последнего элемента у массива строк. Определите, какие значения останутся в массивах после выполнения кода.
import Foundation
class MyView: CustomStringConvertible {
let index: UInt
var ID: String
init(withIndex index: UInt) {
self.index = index
ID = String(index)
}
var description: String {
return "(\(index), \(ID))"
}
}
class MyViewController {
var strings: [String] = []
var views: [MyView] = []
}
class FirstViewController: MyViewController {}
class SecondViewController: MyViewController {}
let firstVC = FirstViewController()
firstVC.strings = ["One", "Two", "Three"]
firstVC.views = [MyView(withIndex: 1), MyView(withIndex: 2), MyView(withIndex: 3)]
let secondVC = SecondViewController()
secondVC.strings = firstVC.strings
secondVC.views = firstVC.views
secondVC.strings.popLast
Ответ
Последняя строка не вызывает удаление: у popLast отсутствуют (). Для mutating-метода попытка использовать его как значение также может быть ошибкой компиляции.
Исправьте строку на secondVC.strings.popLast(). Тогда firstVC.strings останется ["One", "Two", "Three"], а secondVC.strings станет ["One", "Two"], потому что Swift Array имеет семантику значения. Массивы views в этом фрагменте вообще не изменяются; они содержат ссылки на одни и те же три MyView. В программе нет print, поэтому даже исправленный код сам по себе ничего не выводит.