Swift 尝试在UIImageView上使用SDWebImage扩展时出错

Swift 尝试在UIImageView上使用SDWebImage扩展时出错,swift,uiimage,sdwebimage,Swift,Uiimage,Sdwebimage,我一直在尝试在占位符中显示用户选择的配置文件图像。我成功地选择了一个图像,但如上所述,它不会显示在我选择的占位符中 我反复收到一个错误,说明: “UIImageView”类型的值没有成员“sd_setImage” 我已经编写了以下代码 class AddProfilePictureViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOu

我一直在尝试在占位符中显示用户选择的配置文件图像。我成功地选择了一个图像,但如上所述,它不会显示在我选择的占位符中

我反复收到一个错误,说明:

“UIImageView”类型的值没有成员“sd_setImage”

我已经编写了以下代码

class AddProfilePictureViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @IBOutlet weak var userProfileImageView: UIImageView!

    @IBAction func chooseFromLibraryButtonTapped(_ sender: Any) {
        let profileImagePicker = UIImagePickerController()
        profileImagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        profileImagePicker.mediaTypes = [kUTTypeImage as String]
        profileImagePicker.delegate = self
        present(profileImagePicker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
    {
        if let profileImage =
        info[UIImagePickerControllerOriginalImage] as? UIImage, let
        optimizedImageData = UIImageJPEGRepresentation(profileImage, 0.8) {
            // Upload image from here
            uploadProfileImageData(imgageData: optimizedImageData)
        }
        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController)
    {
        picker.dismiss(animated: true, completion: nil)
    }

    func uploadProfileImageData(imgageData: Data)
    {
        let activityIndicator = UIActivityIndicatorView.init(activityIndicatorStyle: .gray)
        activityIndicator.startAnimating()
        activityIndicator.center = self.view.center

        self.view.addSubview(activityIndicator)
        let storageReference = Storage.storage().reference()
        let currentUser = Auth.auth().currentUser
        let profileImageRef = storageReference.child("users").child(currentUser!.uid).child("profileImage.jpg")

        let uploadMetaData = FirebaseStorage.StorageMetadata()
        uploadMetaData.contentType = "image/jpeg"

        profileImageRef.putData(imgageData, metadata: uploadMetaData) { (uploadedImageMeta, error) in
            activityIndicator.stopAnimating()
            activityIndicator.removeFromSuperview()

            if error != nil
            {
                print("Error took place \(String(describing: error?.localizedDescription))")
                return
            } else {
                print("Meta data of uploaded image \(String(describing: uploadedImageMeta))")
            }

            let storageReference = Storage.storage().reference()
            // create a reference to the file you want to download
            let profileImageDownloadUrlReference = storageReference.child("users/\(currentUser!.uid)/profileImage.jpg")

            // UIImageView in your ViewController
            // let imageView: UIImageView = self.imageView

            // Placeholder image
            let placeholderImage = UIImage(named: "placeholder.jpg")

            // Load the image using SDWebImage
            userProfileImageView.sd_setImage(with: profileImageDownloadUrlReference, placeholderImage: placeholderImage)

            // fetch the download url

            profileImageDownloadUrlReference.downloadURL { url, error in
                if let error = error {
                    // Handle any errors
                    print("Error took place \(error.localizedDescription)")
                } else {
                    // get the download URL for 'images/stars.jpg'
                    print("Profile image download URL \(String(describing: url!))")
                }
            }
        }
    }
}


您必须在将图像设置为图像视图的类顶部导入SDWebImage。 导入后,只需构建应用程序,错误就会消失。 您还可以使用翠鸟吊舱进行图像加载。它比sdwebimage轻

1.首先创建存储引用(请参见Firebase文档):

2.现在您可以直接从Firebase存储中加载图像作为URL,无需存储任何HTTP URL Firebase将在内部为您完成一切

您可以在Firebase数据库中保存特定图像的引用名称,以标识该特定图像

使用此代码

// Reference to an image file in Firebase Storage
 let reference = storageRef.child("images/stars.jpg")

// UIImageView in your ViewController
let imageView: UIImageView = self.imageView

// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")

// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
  • 在pod文件中添加pod“FirebaseUI/存储”
  • 打开端子并安装吊舱
  • 您需要在此swift文件中导入FirebaseUI
  • 在您的pod文件中添加pod“SDWebImage”、“~>5.0”
  • 导航到项目文件夹并键入“pod安装”
  • 在swift文件中,添加“导入SDWebImage”
  • 您可能忘记安装SDWebImage库。你可以在这里查阅这个图书馆。

    您导入了sdwebimage吗?是的,我导入了,但“使用sdwebimage加载图像”部分仍然出现了一个红色突出显示的错误,该部分现在显示“无法将“StorageReference”类型的值转换为预期的参数类型“URL?”“请详细说明您的答案,显示代码示例等。”
        import UIKit
        import Firebase
        import FirebaseUI
    
        class SelectProposeViewController: UIViewController {
            @IBOutlet weak var ImageView: UIImageView!
            @IBOutlet weak var UserImageView: UIImageView!
            
            var proposal_dict: ProposalShow?
            let storage = Storage.storage()
            
            override func viewDidLoad() {
                super.viewDidLoad()
                self.title=""
                
                self.UserImageView.sd_setImage(with: self.storage.reference(forURL: self.proposal_dict?.proposalDict["userphoto"] as! String) , placeholderImage: UIImage())
                self.ImageView.sd_setImage(with: self.storage.reference(forURL: self.proposal_dict?.proposalDict["postphoto"] as! String))
                
            }
        }