我已经看过这个答案的大量解决方案,但找不到有效的解决方案或解释为什么会这样。这是我的代码:
@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
有人可以解释发生了什么吗?
答案 0 :(得分:0)
你应该使用
var imageView = UIImageView()
...声明并实例化你的UIImageView属性。
正如您的代码所代表的那样,您将imageView声明为隐式展开的可选值,并且从未实际初始化它,因此它是零。相反,由于您始终不希望您的属性为零,因此您应该使用非可选变量(UIImageView
而不是UIImageView!
)并在声明它时构造它。
我猜你可能因为现有的UIScrollview声明而被诱惑使用可选类型:
@IBOutlet var scrollView : UIScrollView!
一个是隐式展开的可选项的原因是因为它是一个IBOutlet,所以当构建视图控制器时它将是nil,但它将由框架初始化"再水化"从您的笔尖(Storyboard)文件中加热对象的代码。因此它必须是可选的,因为它在init运行之后(简要地)为nil,但是在你的任何代码到达它之前它将由框架设置,因此隐式展开它意味着更少键入以访问您可以信任的非零的内容。