2017-08-17 46 views
0

我正在尝试完成社交媒体应用的登录页面,并且出现了一个我无法弄清楚的错误。尝试构建登录时出现条件绑定错误的初始化工具登录

下面是完整的代码:

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可能不是可选的事实有关,但在指南中我遵循它的工作原理。

谢谢!

+0

什么是错误? –

+0

[编辑]你的问题与完整和确切的错误。 – rmaddy

+0

我想你试图让守卫让非可选值。你已经在使用!用变量表示你有一个不是可选的变量。 –

回答

0

您声明userImagePickerUIButtonUIButton没有财产,称为image。您应该使用currentImage

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

'imageSelected == true' == true是多余的 –

+0

@LeoDabus,我明白了,但我没有写出来,我只是编辑了错误的部分。 –

+0

谢谢!这解决了它。 – user8480321