ios - 如何摆脱保存在 firebase 中的 url 之前的可选词?

标签 ios swift firebase

目前我正在保存存储在 firebase 数据库中的图像的 url。但是我在 url 之前得到了可选这个词。如下所示。

"Optional(https:URL.HERE)"

以下是保存发生的代码块:

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

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

        // You can also access to download URL after upload.
        storageRef.downloadURL { (url, error) in
            guard let downloadURL = url else {
                // Uh-oh, an error occurred!
                return
            }
            let imgURL = url

            //database integration
            let ref = Database.database().reference()
            let usersRef = ref.child("usersPosts")

            let uid = Auth.auth().currentUser?.uid
            let newUserRef = usersRef.child(uid!)
            //creates a child for email and password (i think we shud store password so we can tell sumone what it is inmediatly, maybe)
            newUserRef.setValue(["Image": "\(imgURL)"])
        }

    }

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

        let percentage = (Float(progress.completedUnitCount) / Float(progress.totalUnitCount))
        progressBlock(Double(percentage))
    })

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

最佳答案

您正在获取 Optional... 因为 imgURL 是可选的。 imgURL 是可选的,因为您从可选的 url 分配了它。

因为您已经在 guard 语句中解包了 url,所以只需使用 downloadURL 而不是创建 imgURL

删除:

let imgURL = url

并将 imgURL 的使用替换为 downloadURL,这是来自 guardurl 的正确解包版本.

newUserRef.setValue(["Image": "\(downloadURL)"])

关于ios - 如何摆脱保存在 firebase 中的 url 之前的可选词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51970069/

相关文章:

iphone - 在 iOS 中从 NSFileWrapper 播放电影

ios - 禁用 CATextLayer.string 属性的隐式动画

SwiftUI 表单编号输入

c - Swift:UnsafeMutablePointer.deallocate(capacity:) 与 free() 的互操作性

firebase - 应用程序被终止后,Flutter firebase 身份验证不会持续存在

ios - RxSwift 在模拟的 UserDefaults 上观察测试用例

ios - `Branch.initSession` 当应用程序从链接启动时不调用 `andRegisterDeepLinkHandler` 回调

android - Flutter 2.0 与 Firebase 云消息传递 : onMessage not called on Android

java - 如何从 firebase 列表中删除项目

ios - Cordova InAppBrowser 打开但页面加载到主页面