Код печатает не цвет, а colorSpace у CGColor — optional-описание цветового пространства. По этой строке нельзя определить, красный фон или зелёный.
Какой цвет будет выведен в консоль
Код печатает не цвет, а colorSpace у CGColor — optional-описание цветового пространства. По этой строке нельзя определить, красный фон или зелёный.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Вопрос о том, какой именно цвет будет отображён при выводе свойства backgroundColor слоя. Рассмотрим следующий пример кода на Swift, где мы создаём UIView, задаём ему фон, а затем меняем фон его слоя. После этого снова устанавливаем фон представления и выводим в консоль цвет фона слоя.
let view = UIView()
view.backgroundColor = .red
let layer = view.layer
layer.backgroundColor = UIColor.green.cgColor
view.backgroundColor = .red
print(view.layer.backgroundColor?.colorSpace as Any) // ?
Какой цвет будет напечатан?
Ответ
Код печатает не цвет, а colorSpace у CGColor — optional-описание цветового пространства. По этой строке нельзя определить, красный фон или зелёный.
Заголовок вопроса не совпадает с выражением в print: .colorSpace возвращает пространство представления цвета, а не его компоненты или название. Красный и зелёный CGColor могут использовать одинаковое пространство. Прямое изменение layer также не стоит смешивать с повторной записью того же UIView.backgroundColor, полагаясь на внутренние оптимизации setter. Для проверки цвета исследуйте компоненты и их пространство либо приведите CGColor к согласованному пространству; для управления фоном выберите один уровень API.