在swift中展开可选值时出现致命错误。
我有一个配置文件ViewController,背景图片和头像图像是一样的。
当用户没有设置图像时,我遇到了这个致命的错误,而我想添加一个"默认情况下的图像形状"。
我如何检查图像是否为零?
这是我的代码:
var currentUser = PFUser.currentUser()
let User = currentUser as PFUser
let userImage:PFFile = User["profileImage"] as PFFile {
userImage.getDataInBackgroundWithBlock{(imageData:NSData!, error:NSError!)-> Void in
if !(error != nil) {
var image:UIImage! = UIImage(data: imageData)
if image != 0 {
self.backgroundImageUser.image = image
self.avatarUserView.image = image
}
else if image == 0 {
self.backgroundImageUser.image = UIImage(named: "Shape")
self.avatarUserView.image = UIImage(named: "Shape")
}
}}}
答案 0 :(得分:2)
试试这个:
userImage.getDataInBackgroundWithBlock{(imageData:NSData?, error:NSError?)-> Void in
if let image = UIImage(data: imageData) {
self.backgroundImageUser.image = image
self.avatarUserView.image = image
}
else {
self.backgroundImageUser.image = UIImage(named: "Shape")
self.avatarUserView.image = UIImage(named: "Shape")
}
}
答案 1 :(得分:1)
为了使其正常工作,您必须了解Optional Chaining。 正如the Apple Documentation所说:
可选链接是一个查询和调用当前可能为nil的可选项的属性,方法和下标的过程。如果optional包含值,则属性,方法或下标调用成功;如果optional是nil,则属性,方法或下标调用返回nil。多个查询可以链接在一起,如果链中的任何链接为零,整个链都会正常失败。
因此,如果您希望对象获取nil值,则必须将其声明为Optional。将对象声明为可选您必须在值后面放置一个问号。 在您的示例中,它将如下所示:
var image:UIImage? ;
image = UIImage(data: imageData) ;
通过将此UIImage声明为Optional,它将使用nil初始化。
答案 2 :(得分:0)
let image : UIImage? = img
if image != nil{
}else{
}
答案 3 :(得分:0)
迅速5
var imageBottom = UIImage.init(named: "contactUs")
if imageBottom != nil {
imageBottom = imageBottom?.withRenderingMode(.alwaysTemplate)
bottomImageview.image = imageBottom
}
答案 4 :(得分:-1)
实际上问题出现了,正如你在编辑的帖子中看到的那样,我的userImage声明不是可选的。
所以现在一切正常:
var currentUser = PFUser.currentUser()
let User = currentUser as PFUser
if let userImage:PFFile = User["profileImage"] as? PFFile {
userImage.getDataInBackgroundWithBlock{(imageData:NSData!, error:NSError!)-> Void in
if !(error != nil) {
var image :UIImage! = UIImage(data: imageData)
self.backgroundImageUser.image = image
self.avatarUserView.image = image
}
}}
else {
self.backgroundImageUser.image = UIImage(named: "Shape")
self.avatarUserView.image = UIImage(named: "Shape")
}