【发布时间】:2021-04-30 14:55:30
【问题描述】:
我是 Swift 和 Firebase 的新手。我正在尝试编写将用户结构转换为字典形式的代码,并将其保存到 Firebase 数据库。我想尝试使用 JSONEncoder 将 UserClass 转换为字典形式,尽管我收到错误“User 类型的值没有成员 asDict()”。这是程序的代码。
这是 Firebase 存储服务的模块:
import Foundation
import Firebase
import FirebaseAuth
import FirebaseStorage
class StorageService {
static var storage = Storage.storage()
static var storageRoot = storage.reference(forURL: "link to firebase")
static var storageProfile = storageRoot.child("profile")
static func storageProfileId(userId: String) -> StorageReference{
return storageProfile.child(userId)
}
static func saveProfileImage(userId: String, username: String, email: String, imageData: Data, metaData:StorageMetadata, storageProfileImageRef:StorageReference, onSuccess: @escaping(_ user: UserClass) -> Void, onError: @escaping(_ errorMessage:String) -> Void){
storageProfileImageRef.putData(imageData, metadata: metaData){
(StorageMetadata, error) in
if error != nil{
onError(error!.localizedDescription)
}
storageProfileImageRef.downloadURL{
(url, error) in
if let metaImageUrl = url?.absoluteString {
if let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest() {
changeRequest.photoURL = url
changeRequest.displayName = username
changeRequest.commitChanges {
(error) in
if error != nil {
onError(error!.localizedDescription)
return
}
}
}
let firestoreUserId = AuthService.getUserId(userId: userId)
let user = UserClass.init(uid: userId, email: email, profileImageUrl: metaImageUrl, username: username, searchName: username.splitString(), description: "")
guard let dict: [String: Any] = try?user.asDict() else {return}
firestoreUserId.setData(dict){
(error) in
if error != nil {
onError(error!.localizedDescription)
return
}
}
onSuccess(user)
}
}
}
}
}
这是用户结构:
struct UserClass {
var uid:String
var email:String
var profileImageUrl:String
var username:String
var searchName:[String]
var description:String
}
这里是 JSON 编码器的扩展
extension Encodable{
func asDict() throws -> [String: Any] {
let data = try JSONEncoder().encode(self)
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any]
else{
throw NSError()
}
return dictionary
}
}
这可能是一个小错误,我还没有看到。我试图为它找到几天的解决方案,但没有运气。我将感谢各位同行和更有经验的程序员提供的任何帮助。
【问题讨论】:
-
你的问题不在SwiftUI框架,是Swift。