无法将“[String : String?]”类型的值转换为预期的参数类型“String”

Posted

技术标签:

【中文标题】无法将“[String : String?]”类型的值转换为预期的参数类型“String”【英文标题】:Cannot convert value of type '[String : String?]' to expected argument type 'String' 【发布时间】:2021-09-08 15:22:27 【问题描述】:

我正在尝试将一些用户数据添加到我的 firebase 实时数据库中,但是当我尝试使用数据添加子节点时,我在下面收到此错误。我尝试将userData 变量的类型更改为String,但没有任何改变。

错误:

Cannot convert value of type '[String : String?]' to expected argument type 'String'

我的代码:

private func firebaseAuthentication(withUser user: GIDGoogleUser) 
    
  if let authentication = user.authentication 
    
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)

    Auth.auth().signIn(with: credential)  (_, error) in
      if let error = error 
        print(error.localizedDescription)
       else 
        
        // Add user data to real-time db if user does not already exists
        let userData = [
            "id" : Auth.auth().currentUser?.uid,
            "email" : Auth.auth().currentUser?.email,
            "name" : Auth.auth().currentUser?.displayName,
            "photoUrl": "none",
            "premium": "false"
        ]
        
                
        ref.observeSingleEvent(of: .value)  snapshot in
            
            if !snapshot.hasChild(Auth.auth().currentUser?.uid ?? "noid") 
                // user does not exist
                
                usersRef.child(Auth.auth().currentUser?.uid ?? "noid").child(userData) // here i'm getting the error
                
            
            
         withCancel:  error in
            
        

        
        self.state = .signedIn
      
    
  

【问题讨论】:

【参考方案1】:

替换

.child(userData)

.setValue(userData)

【讨论】:

以上是关于无法将“[String : String?]”类型的值转换为预期的参数类型“String”的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型 ('string', 'string') 隐式转换为 System.Net.ICredentialsByHost

无法使用“Int”类型的索引为“[String : String]”类型的值下标

Swift3:如何将一个String类型值添加到已经粘贴了计算值的UI Label中?

PromiseKit 6:无法使用类型为“((String,String)-> Promise<Data>)”的参数列表调用“then”

无法将类型的值转换为UINavigationController swift3

swift 3完成处理程序返回字符串