Какой цвет будет выведен в консоль

Код печатает не цвет, а 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее