2017-08-17 11 views
0

ソーシャルメディアアプリケーションのログインページを終了しようとしていますが、私は把握できないエラーが1つあります。私は何をすべきか見当がつかないログインの構築中に条件付きバインディングエラーの初期設定

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

     print("image must be selected") 

     return 
    } 

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

タイトルに言及したエラーを引き起こしているコードはこれです:

はここで完全なコードです。私はそれがuserimagePicker.imageがオプションではないかもしれないという事実と関係があると読んでいますが、それは私がそれに従っているガイドでは機能します。

ありがとうございます!

+0

エラーは何ですか? –

+0

あなたの質問を完全で正確なエラーで[編集]してください。 – rmaddy

+0

私はあなたがガードするつもりはないと思います。あなたはすでに使用しています!変数を使用すると、オプションではない変数があることを意味します。 –

答えて

0

userImagePickerUIButtonとし、UIButtonにはimageというプロパティがないと宣言しました。あなたが使用する必要がありますcurrentImage

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

'imageSelected == true' == trueは冗長です –

+0

@LeoDabus、わかりましたが、書きませんでした。 –

+0

ありがとう!それはそれを修正した。 – user8480321

関連する問題