我在downloadURL = metadata.downloadURL上遇到问题。 let是否必须在前面才能使它起作用?当我说


  定义与先前的值冲突,并且类型“ StorageMetaData”的值没有成员“ downloadURL”


任何帮助将不胜感激,因为到目前为止我还没有找到任何帮助。

// 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
    }

    // Metadata contains file metadata such as size, content type, and download URL
    downloadURL = metadata.downloadURL

最佳答案

编译器会告诉您出了什么问题。您使用guard let创建一个let常量downloadURL。一旦该常量具有值,就无法更改。然后,您尝试更改其值。那是不允许的。

您的代码令人困惑,因为首先给downloadURL分配了保护让,然后尝试为downloadURL分配完全不同的值。 (在第二种情况下,您使用metadata.downloadURL

为什么要为downloadURL分配一个值,然后立即忘记该值并将其替换为其他值?

相反,您可以编写如下代码:

storageRef.downloadURL { (url, error) in
    //Use the name `inputURL` to indicate this is the URL passed to the closure
    guard let inputURL = url else {
        // Uh-oh, an error occurred!
        return
    }

    // Metadata contains file metadata such as size, content type, and download URL
    let downloadURL = metadata.downloadURL
    }
}

关于swift - 无法分配值:“downloadURL”是一个常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56009151/

10-11 16:21