“无法转换类型的值” - Firebase Swift中的错误

时间:2016-01-31 15:20:22

标签: ios xcode swift firebase

我正在尝试使用电子邮件和电子邮件在Firebase中创建用户密码和成功创建用户记录后,我会使用其他属性更新树作为用户UID的子节点。以下是我在代码中的内容:

@IBAction func registerPressed(sender: AnyObject) {
        let connection = Firebase(url:"https://something.firebaseio.com")

        connection.createUser(self.emailTxtField.text, password: self.passwordTxtField.text,
            withValueCompletionBlock: { error, result in
                if error != nil {
                    // There was an error creating the account
                    print("Error Creating Account...Please try again")

                } else {
                    let uid = result["uid"] as? String
                    print("Successfully created user account with uid: \(uid)")

                    /*After creating the user, we want to update the tree with other attributes*/
                    let userAdditionalDetails = ["name": self.nameTxtField.text, "mobile": self.mobileTxtField.text, "username": self.usernameTxtField.text]
                    let usersRef = connection.childByAppendingPath("users")

                    let users = ["\(uid)": userAdditionalDetails]
                    usersRef.setValue(users)
                }
        })
    }

虽然我不确定上述内容是否有效(因为这是我第一次使用Firebase SDK),但我收到以下错误:

  

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

由于在行上触发了上述错误,我当然无法构建项目:

                usersRef.setValue(users)

知道为什么会这样,以及如何解决它?

提前致谢。

2 个答案:

答案 0 :(得分:1)

找到解决方案并将其放在此处以供其他人未来参考:

@IBAction func registerPressed(sender: AnyObject) {
    let connection = Firebase(url:"https://something.firebaseio.com")

    connection.createUser(self.emailTxtField.text, password: self.passwordTxtField.text,
        withValueCompletionBlock: { error, result in
            if error != nil {
                // There was an error creating the account
                print("Error Creating Account...Please try again")

            } else {
                let uid = result["uid"] as? String
                print("Successfully created user account with uid: \(uid)")

                /*After creating the user, we want to update the tree with other attributes*/
                let userAdditionalDetails = ["name": "\(self.nameTxtField.text!)", "mobile": "\(self.mobileTxtField.text!)", "username": "\(self.usernameTxtField.text!)"]
                let usersRef = connection.childByAppendingPath("users")

                let users = ["\(uid)": userAdditionalDetails]
                usersRef.setValue(users)
            }
    })


}

问题是,在初始化userAdditionalDetails时,应该包含字符串格式的outlet变量。例如。

"username": "\(username.text!)"

这很有效,所有对象都在后端正确反映。

答案 1 :(得分:-1)

在对usersRef.setValue(users)的调用中,错误消息指出该参数应为AnyObject!类型。因此,您必须将users强制转换为AnyObject!类型:

let users = ["\(uid)": userAdditionalDetails]
usersRef.setValue(users as? AnyObject)