The error is most likely that imageURL
is nil. Are you assigning it a value elsewhere in the code, or is it actually @IBOutlet
in the real code? If you do not assign a value to it, it will be nil - but its type of UIImageView!
means it is an "implicitly unwrapped optional" which means the compiler won't stop you using it even if it is nil, but will crash at runtime with the error you're getting.
The rest of the code is correct (assuming the missing space before !=
is a typo not in your compiling code), but you would be better off using if let
to unwrap your optionals rather than checking them against nil
and then using the force-unwrap operator:
if let url = NSURL(string: "http://etc...") {
if let data = NSData(contentsOfURL: url) {
imageURL.image = UIImage(data: data)
}
}
If you happen to be using the Swift 1.2 beta, you can combine the two ifs together:
if let url = NSURL(string: "http://etc..."),
data = NSData(contentsOfURL: url)
{
imageURL.image = UIImage(data: data)
}
Or, if you prefer, use flatMap
:
imageURL.image =
NSURL(string: "http://etc...")
.flatMap { NSData(contentsOfURL: $0) }
.flatMap { UIImage(data: $0) }
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…