У меня возникли некоторые трудности с загрузкой фотографии в качестве изображения профиля для пользователей. Вот некоторые настройки моего кода. Так я настраивал свой класс пользователей.
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)
}