在Swift中创建图像视图

时间:2014-12-14 20:38:37

标签: ios swift

我已经看过这个答案的大量解决方案,但找不到有效的解决方案或解释为什么会这样。这是我的代码:

@IBOutlet var scrollView : UIScrollView!
var imageView : UIImageView!

override func viewDidLoad() {
    if let image = UIImage(named: "Instructions") {
        imageView.image = image
    }
    scrollView.addSubview(imageView)
    scrollView.contentSize = imageView.frame.size
}

这是错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:0)

你应该使用

var imageView = UIImageView()

...声明并实例化你的UIImageView属性。

正如您的代码所代表的那样,您将imageView声明为隐式展开的可选值,并且从未实际初始化它,因此它是零。相反,由于您始终不希望您的属性为零,因此您应该使用非可选变量(UIImageView而不是UIImageView!)并在声明它时构造它。

我猜你可能因为现有的UIScrollview声明而被诱惑使用可选类型:

@IBOutlet var scrollView : UIScrollView!

一个是隐式展开的可选项的原因是因为它是一个IBOutlet,所以当构建视图控制器时它将是nil,但它将由框架初始化"再水化"从您的笔尖(Storyboard)文件中加热对象的代码。因此它必须是可选的,因为它在init运行之后(简要地)为nil,但是在你的任何代码到达它之前它将由框架设置,因此隐式展开它意味着更少键入以访问您可以信任的非零的内容。