Загрузить фото с помощью Swift и Firebase - PullRequest
0 голосов
/ 12 апреля 2020

У меня возникли некоторые трудности с загрузкой фотографии в качестве изображения профиля для пользователей. Вот некоторые настройки моего кода. Так я настраивал свой класс пользователей.

import UIKit
import FirebaseStorage
import FirebaseDatabase
import FirebaseAuth
class Users: NSObject {
    var username : String = ""
    var email : String = ""
    var uid : String = ""
    var profilePicLink : String
    init(username : String, email: String, uid : String, profilePicLink: String ) {
        self.username = username
        self.email    = email
        self.uid      = uid
        self.profilePicLink = profilePicLink
    }
    func getProfileImage() -> UIImage {
        if let url = NSURL(string: profilePicLink){
            if let data = NSData(contentsOf: url as URL) {
                return UIImage(data: data as Data)!
            }
        }
        return UIImage()
    }
    func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let storageRef = Storage.storage().reference().child("user/\(uid)")

    guard let imageData = image.jpegData(compressionQuality: 0.75) else { return }

    let metaData = StorageMetadata()
    metaData.contentType = "image/jpg"

    storageRef.putData(imageData, metadata: metaData) { metaData, error in
        if error == nil, metaData != nil {

            storageRef.downloadURL { url, error in
                completion(url)
                // success!
            }
            } else {
                // failed
                completion(nil)
            }
        }
    }

  }

В классе SettingView я вызвал забаву c uploadProfileImage, однако я получил ошибку «Заполнитель редактора в исходном файле» . Подскажите, пожалуйста, что я должен передать значение по завершению в функции uploadPhoto в настройках класса просмотра

import UIKit

class SettingView: UIViewController, UIImagePickerControllerDelegate & UINavigationControllerDelegate {

    @IBOutlet var imageView: UIImageView!

    @IBOutlet var displayName: UILabel!
    var selectedUser:Users?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(displayName.text == selectedUser?.username)
    }
    @IBAction func getPhotoButton(_ sender: Any) {
        let image = UIImagePickerController()
        image.delegate = self
        image.sourceType = UIImagePickerController.SourceType.photoLibrary
        self.present(image, animated: true, completion: nil)
    }
    @IBAction func updatePhoto(_ sender: Any) {
        uploadPhoto()
    }
    func uploadPhoto(){
        selectedUser?.uploadProfileImage(imageView.image!, completion: <#(URL?) -> ()#>) **Error : Editor placeholder in source file**

    }
    private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let pickerInfo: NSDictionary = info as NSDictionary
        let img : UIImage = pickerInfo.object(forKey: UIImagePickerController.self) as! UIImage
        imageView.image = img
        self.dismiss(animated: true, completion: nil)
    }

1 Ответ

0 голосов
/ 12 апреля 2020

XCode жалуется, потому что у вас есть редактор-заполнитель completion: <#(URL?) -> ()#>) в методе uploadPhoto. Замените uploadPhoto метод следующим:

func uploadPhoto(){
    selectedUser?.uploadProfileImage(imageView.image!) { url in

        print(url)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...