How to check if imageView is not nil in swift?

2019-07-29 00:50发布

I have a fatal error while unwrapping an optional value in swift.

I have a profile ViewController with a background image and an avatar image witch are the same.

When the user has not an image set, i ve got this fatal error, instead i would like to add a "by default image Shape".

How could i check if image isn't nil ?

This is my code :

 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")
            }
            }}}

4条回答
我想做一个坏孩纸
2楼-- · 2019-07-29 01:32

Try this:

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")
    }
}
查看更多
来,给爷笑一个
3楼-- · 2019-07-29 01:38

In order to get this working, you have to understand Optional Chaining. As the Apple Documentation says:

Optional chaining is a process for querying and calling properties, methods, and subscripts on an optional that might currently be nil. If the optional contains a value, the property, method, or subscript call succeeds; if the optional is nil, the property, method, or subscript call returns nil. Multiple queries can be chained together, and the entire chain fails gracefully if any link in the chain is nil.

So if you want an object to get a nil Value, you have to declare it as Optional. To declare the object as Optional You have to place a question mark after the value. In your example it will look just like this:

 var image:UIImage? ;
 image = UIImage(data: imageData) ;

And by declaring this UIImage as Optional, it will be initialized with nil.

查看更多
祖国的老花朵
4楼-- · 2019-07-29 01:41

In fact the problem was up, as you can see in the edited post, i had a the userImage declaration not optional.

So now everything work fine with :

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")

    }
查看更多
太酷不给撩
5楼-- · 2019-07-29 01:45
let image : UIImage? = img

   if image != nil{

   }else{

   }
查看更多
登录 后发表回答