解包一个可选值时出错

时间:2016-02-12 18:32:45

标签: ios swift uiview uivisualeffectview weak

  

致命错误:在解包可选值时意外发现nil

使用以下代码:

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 个答案:

答案 0 :(得分:4)

删除?

分配中的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的情况下才会发生。