Значение необязательного типа CGFloat не разворачивается ошибка в Swift

код:

var loadView = UIView(frame: CGRectMake(0, 0, self.window?.frame.size.width, self.window?.frame.size.height))

Я пытаюсь создать UIView progrmatically. При попытке установить высоту и ширину окна для просмотра он дает ошибку как "Значение необязательного типа" CGFloat? ". не разворачивается, вы хотели использовать '!' или '?'?" почему эта ошибка показывает? любая помощь будет оценена. Спасибо заранее

Ответ 1

Вы используете необязательную цепочку, что означает, что self.window?.frame.width оценивает действительное целое число, если window не nil, в противном случае оно будет nil - то же самое для height.

Поскольку вы не можете сделать CGRect содержащий nil (или, лучше сказать, CGRectMake не принимает необязательный для любого из своих аргументов), компилятор сообщает об этом как ошибку.

Решение состоит в том, чтобы неявно развернуть self.window:

    var loadView = UIView(frame: CGRectMake(0, 0, self.window!.frame.size.width, self.window!.frame.size.height))

Но это вызывает ошибку времени выполнения в случае, если self.window - nil. Всегда лучше использовать окружение с необязательной привязкой:

if let window = self.window {
    var loadView = UIView(frame: CGRectMake(0, 0, window.frame.size.width, window.frame.size.height))
    .... do something with loadVIew
}

чтобы убедиться, что представление создано только в том случае, если self.window на самом деле не ноль.