'Can't connect my project Cannot convert value of type 'User' to expected argument type '[String : Any]'
I'm trying to connect with Firebase and I have an error.
This is my UserViewModel:
import Foundation
import FirebaseAuth
import FirebaseFirestore
class UserViewModel: ObservableObject {
// MARK: State
@Published var user: User?
// MARK: Properties
private let auth = Auth.auth()
private let db = Firestore.firestore()
var uuid: String? {
auth.currentUser?.uid
}
var userIsAuthenticated: Bool {
auth.currentUser != nil
}
var userIsAuthenticatedAndSynced: Bool {
user != nil && self.userIsAuthenticated
}
// MARK: Firebase Auth Functions
func signIn(email: String, password: String) {
auth.signIn(withEmail: email, password: password) { [weak self] result, error in
guard result != nil, error == nil else { return }
// Successfully authenticated the user, now attempting to sync with Firestore
DispatchQueue.main.async {
self?.sync()
}
}
}
func signUp(email: String, username: String, password: String) {
auth.createUser(withEmail: email, password: password) { [weak self] result, error in
guard result != nil, error == nil else { return }
DispatchQueue.main.async {
self?.add(User(username: username))
self?.sync()
}
}
}
func signOut() {
do {
try auth.signOut()
self.user = nil
} catch {
print("Error signing out the user: \(error)")
}
}
// Firestore functions for User Data
private func sync() {
guard userIsAuthenticated else {
return
}
db.collection("users").document(self.uuid!).getDocument { (document, error) in
guard document != nil, error == nil else {
return
}
do {
try self.user = document!.data(as: User.self)
} catch {
print("Sync error: \(error)")
}
}
}
private func add(_ user: User) {
guard userIsAuthenticated else {
return
}
do {
let _ = try db.collection("users").document(self.uuid!).setData(user)
} catch {
print("Error adding: \(error)")
}
}
private func update() {
guard userIsAuthenticatedAndSynced else {
return
}
do {
let _ = try db.collection("users").document(self.uuid!).setData(self.user)
} catch {
print("Error updating: \(error)")
}
}
}
and my User model:
import Foundation
struct User: Codable {
var username: String
}
My errors are: Cannot convert value of type 'User' to expected argument type '[String : Any]'
What do I do to fix these problems? How to change my code properly? It occurs in the add, sync and update functions.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
