ios - 尝试将多个图像上传到Firebase : 2 Errors in SWIFT 4, FIREBASE 5.0.0

标签 ios swift xcode firebase error-handling

我正在制作一个非常类似于Instagram的多图像发布功能的项目,由于ImageUploadManager,我在CapturePhotoController中有两个彼此关联的错误。错误是:

无法分配给'ImageUploadManager.Type'类型的不可变表达式
输入“ImageUploadManager?”没有成员“uploadImage”

这是在此 View Controller 中发生的:*错误带有注释标记

import UIKit

class takePicViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var imageView: UIImageView!

    let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()

        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        imagePicker.allowsEditing = false

    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        if let userPickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
 // Error       ImageUploadManager = ImageUploadManager()
 // Error        ImageUploadManager?.uploadImage(userPickedImage, progressBlock: { (percentage) in
                print(percentage)
            }, completionBlock: { (fileURL, errorMessage) in
                 print(fileURL)
                print(errorMessage)
            })

            PhotoArray.sharedInstance.photosArray.append(userPickedImage)  //append converted data in array

            imageView.image = userPickedImage

        }

        imagePicker.dismiss(animated: true, completion: nil)
    }

    @IBAction func cameraButtonPressed(_ sender: UIButton) {

        present(imagePicker, animated: true, completion: nil)

    }


}

这是ImageUploadManager的代码:
import UIKit
import FirebaseStorage
import Firebase

struct Constants {

    struct Car {
        static let imagesFolder: String = "carImages"
    }

}

class ImageUploadManager: NSObject {

    func uploadImage(_ image: UIImage, /**/ progressBlock: @escaping (_ percentage: Double) -> Void, /**/ completionBlock: @escaping (_ url: String?, _ errorMessage: String?) -> Void) {

        let data = Data()

        let storage = Storage.storage()
        let storageRef = storage.reference()

        let imageName = "\(Date().timeIntervalSince1970).jpg"
        let imagesReference = storageRef.child(Constants.Car.imagesFolder).child(imageName)

        if let imageData = UIImageJPEGRepresentation(image, 0.8) {
            let metadata = storageRef.child("image/jpg")


            let uploadTask = metadata.putData(data, metadata: nil) { (metadata, error) in
                guard let metadata = metadata else {
                    // Uh-oh, an error occurred!
                    return
                }

                storageRef.downloadURL { (url, error) in
                    guard let downloadURL = url else {
                        // Uh-oh, an error occurred!
                        return
                    }
                }
            }

            uploadTask.observe(.progress, handler: { (snapshot) in
                guard let progress = snapshot.progress else {
                    return
                }

                let percentage = (Double(progress.completedUnitCount) / Double(progress.totalUnitCount)) * 100
                progressBlock(percentage)

            })
        } else {
            completionBlock(nil, "Image could not be converted to Data.")
        }

        }

}

最佳答案

是注释的代码:// Error ImageUploadManager = ImageUploadManager()您的ImageUploadManager声明?如果是这样,那是完全错误的。应该声明如下:

if let userPickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
    let imageUploadManager = ImageUploadManager()
    imageUploadManager.uploadImage(userPickedImage, prog.....

读取ImageUploadManager似乎是一个无状态对象,您可以将函数声明为class函数。
`class func uploadImage(_ image: UIImage`......`

然后可以调用它:
if let userPickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
    ImageUploadManager.uploadImage(userPickedImage, prog.....

关于ios - 尝试将多个图像上传到Firebase : 2 Errors in SWIFT 4, FIREBASE 5.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51902042/

相关文章:

ios - [上下文保存]后,用于关系的核心数据 NSPredicate 不起作用

ios - Swift - 这段代码是错误的还是我应该使用 UserDefaults?

ios - Xcode 6.3 beta - 您的可执行文件包含不受支持的架构 '[armv7k]'

ios - iTunes 连接 - 您必须上传有效的屏幕截图

ios - XCode 调试 (GDB) 在单步执行代码时随机挂起

ios - 为什么 Swift5 上的 CryptoSwift 文本加密失败?

ios - 在模拟器中快速发送短信

c++ - 如何从 Objective-C 与 Xcode 中的 C++ 构建交互

xcode - Swift - 从场景获取 CCNode

iphone - 标签需要几秒钟才能取消隐藏