Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试将多个图像上载到Firebase:SWIFT 4、Firebase 5.0.0中出现2个错误_Ios_Swift_Xcode_Firebase_Error Handling - Fatal编程技术网

Ios 尝试将多个图像上载到Firebase:SWIFT 4、Firebase 5.0.0中出现2个错误

Ios 尝试将多个图像上载到Firebase:SWIFT 4、Firebase 5.0.0中出现2个错误,ios,swift,xcode,firebase,error-handling,Ios,Swift,Xcode,Firebase,Error Handling,我正在制作一个与Instagram的多图像post功能非常相似的项目,由于我的ImageUploadManager,我的capturePhotoController中有两个错误相互连接。错误是: 无法分配给“ImageUploadManager.type”类型的不可变表达式 类型“ImageUploadManager”没有成员“uploadImage” 此视图控制器中正在发生:*错误用注释标记 import UIKit class takePicViewController: UIViewCo

我正在制作一个与Instagram的多图像post功能非常相似的项目,由于我的ImageUploadManager,我的capturePhotoController中有两个错误相互连接。错误是:

无法分配给“ImageUploadManager.type”类型的不可变表达式 类型“ImageUploadManager”没有成员“uploadImage”

此视图控制器中正在发生:*错误用注释标记

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

        }

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

if let userPickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
    let imageUploadManager = ImageUploadManager()
    imageUploadManager.uploadImage(userPickedImage, prog.....
阅读
ImageUploadManager
时,它看起来像是一个无状态对象,您可以将函数声明为
函数

`class func uploadImage(_ image: UIImage`......`
然后,您可以将其称为:

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

这一行没有什么意义:
ImageUploadManager=ImageUploadManager()
。左边应该是一个变量名,您将对象归因于类名。我使用了您的解决方案,现在出现了以下错误:无法对“ImageUploadManager”类型的非可选值使用可选链接,该值发生在“ImageUploadManager?”行中。uploadImage(userPickedImage,…”您提供的第一个解决方案代码的。您想在anwser中查看更新后的代码,还是希望从该评论中获得足够的信息?@StackOverflow更新了答案。我建议您阅读更多关于swift的信息。事实上,我对根据您的答案实现的代码进行了一些更改,并且似乎有效。谢谢!