尝试构建登录时条件绑定错误的初始化程序

Initializer for conditional binding error while trying to build Login

我正在尝试完成社交媒体应用程序的登录页面,但出现一个我似乎无法弄清楚的错误。

完整代码如下:

import UIKit
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase
import SwiftKeychainWrapper

class UserVC: UIViewController, UIImagePickerControllerDelegate, 
UINavigationControllerDelegate

{

@IBOutlet weak var userImagePicker: UIButton!
@IBOutlet weak var CompleteSignInBtn: UIButton!
@IBOutlet weak var usernameField: UITextField!
var userUid: String!
var emailField: String!
var passwordField: String!
var imagePicker : UIImagePickerController!
var imageSelected = false
var username: String!


override func viewDidLoad(){
    super.viewDidLoad()

imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.allowsEditing = true
}

func keychain(){
    KeychainWrapper.standard.set(userUid, forKey: "uid")
}
func imagePickerController(_ picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        userImagePicker.setImage(image,for:.normal)
        imageSelected = true
    } else {
        print("Image was not selected")
    }
    imagePicker.dismiss(animated: true, completion: nil)
}

func setUpUser(img: String ){
    let userData = [

        "username": username!,
        "userImg": img
    ]
    keychain()
    let setLocation = Database.database().reference().child(userUid)
    setLocation.setValue(userData)
}


func uploadImg() {

    if usernameField.text == nil {
        print("Please choose a username")
        CompleteSignInBtn.isEnabled = false
    } else {
        username = usernameField.text
        CompleteSignInBtn.isEnabled = true
    }

        guard let img = userImagePicker.image, imageSelected == true else {

        print("image must be selected")

        return
    }


    if let imgData = UIImageJPEGRepresentation(img, 0.2){
        let imgUid = NSUUID().uuidString
        let metadata = StorageMetadata()
        metadata.contentType = "img/jpeg"

        Storage().reference().child(imgUid).put(imgData, metadata: metadata) { (metadata, error) in
            if error =! nil {
                print("Did not upload")
            } else{
                print("Uploaded")
                let downloadURl = metadata?.downloadURL()?.absoluteString
                if let url = downloadURl {
                    self.setUpUser(img: url)
                }
            }
        }

    }
  }



@IBAction func completeAccount(_ sender: Any){
    Auth.auth().createUser(withEmail: emailField, password: passwordField, completion: { (user, error) in
        if error != nil {
            print("Error\(error)")
        } else {
            if let user = user {
                self.userUid = user.uid
            }
        }
        self.uploadImg() 
    })
    dismiss(animated: true, completion: nil)

}


@IBAction func seletedImagePicker(_ sender: Any){
    present(imagePicker, animated: true, completion: nil)
}

@IBAction func cancel(_ sender: AnyObject){
    dismiss(animated: true, completion: nil)
    }
}

导致标题中提到的错误的代码是这样的:

guard let img = userImagePicker.image, imageSelected == true else {

        print("image must be selected")

        return
    }

我不知道该怎么办。我读到这与 userimagePicker.image 可能不是可选的事实有关,但在我遵循的指南中它有效。

谢谢!

您已将 userImagePicker 声明为 UIButton,并且 UIButton 没有 属性 调用 image。你应该使用 currentImage

guard let img = userImagePicker.currentImage, imageSelected == true else {
   print("image must be selected")
   return
}