lundi 6 mars 2017

how to use If let in optional photo?

So, my app crash because it forces to unwrap the "photo" even if it is optional and it has nothing inside. How do I use the if let statement, like if the photo has a picture then it will show, and if none it will be nil but the app wont crash. I have this struct User this is where my data is saved I am using firebase.

struct User {

    var fullName: String!
    var username: String?
    var email: String!
    var country: String?
    var photoURL: String?
    var biography: String?
    var uid: String!
    var ref: FIRDatabaseReference?
    var key: String?

    init(snapshot: FIRDataSnapshot) {

        key = snapshot.key
        ref = snapshot.ref

        fullName = (snapshot.value! as! NSDictionary) ["fullName"]  as! String
        email = (snapshot.value! as! NSDictionary) ["email"]  as! String
        uid = (snapshot.value! as! NSDictionary) ["uid"] as! String
        country = (snapshot.value! as! NSDictionary) ["country"] as! String?
        biography = (snapshot.value! as! NSDictionary) ["biography"] as! String?
        photoURL = (snapshot.value! as! NSDictionary) ["photoURL"] as! String?
        username = (snapshot.value! as! NSDictionary) ["username"] as! String?
    }

}

this is where the app crashes, because of the "self.storageRef.reference(forURL:imageURL!)" it forces to unwrap even it has nothing inside.

 func loadUserInfo() {

 @IBOutlet weak var userImageView: UIImageView!
    @IBOutlet weak var addButton: UIButton!
    @IBOutlet weak var fullName: UILabel!
    @IBOutlet weak var username: UILabel!
    @IBOutlet weak var country: UILabel!
    @IBOutlet weak var biography: UILabel!

          let userRef = dataBaseRef.child("users/\(FIRAuth.auth()!.currentUser!.uid)")
            userRef.observe(.value, with: { (snapshot) in

                let user = User(snapshot: snapshot)
                self.username.text = user.username
               self.country.text = user.country
                self.biography.text = user.biography
                self.fullName.text = user.fullName
                var imageURL =  user.photoURL

self.storageRef.reference(forURL:imageURL!).data(withMaxSize: 1 * 1024 * 1024, completion: { (imgData, error) in

                if error == nil {
                    DispatchQueue.main.async {
                        if let data = imgData {
                            self.userImageView?.image = UIImage(data: data)
                        }
                    }
                } else {
                    print(error!.localizedDescription)
                }
            })
        })
        { (error) in
            print(error.localizedDescription)
        }
    }

Aucun commentaire:

Enregistrer un commentaire