Ноль при развертывании необязательного значения Ошибка

фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения

Со следующим кодом:

weak var previewBlurView : UIVisualEffectView?

func blurPreviewWindow() {
    if (self.previewBlurView == nil) {
        var blurEffect: UIVisualEffect
        blurEffect = UIBlurEffect.init(style: UIBlurEffectStyle.Dark)
        self.previewBlurView? = UIVisualEffectView(effect: blurEffect)
        self.previewView.addSubview(self.previewBlurView?)
        self.previewBlurView!.frame = self.previewView.bounds
    }

    self.previewBlurView?.alpha = 0.0
    UIView.animateWithDuration(0.2, delay: 0.0, options: [.BeginFromCurrentState, .CurveEaseOut], animations: {() -> Void in
        self.previewBlurView?.alpha = 1.0
    }, completion: { _ in })
}

Я получаю аварию на линии:

self.previewView.addSubview(self.previewBlurView?)

НОТА

Оказалось, что все представления были нулевыми из-за внешней проблемы экземпляра контроллера представления, не относящегося к надлежащему. Так что в этом случае self.previewBlurView оказался нулевым.

1 ответ

Удалить ? в назначении self.previewBlurView:

self.previewBlurView = UIVisualEffectView(effect: blurEffect)

В противном случае происходит то, что назначение происходит только тогда, когда self.previewBlurView на самом деле неnil в начале, что это не так, потому что вы находитесь в процессе назначения чего-то для него.

Сравните следующее:

var a : Int? = 12
a? = 13
print(a)

var b : Int?
b? = 13
print(b)

Какие отпечатки

Дополнительно (13)
ноль

Назначение b? = 13 происходит только если b не является nil что это, к сожалению,

Другие вопросы по тегам