表达式隐含地来自' String?不打印可选

时间:2017-11-20 13:17:07

标签: swift firebase firebase-realtime-database

我认为在尝试打印选项时会导致此错误。我删除了打印命令,我仍然得到了警告。我屏幕上弹了我的代码(见附件)。我正在使用firebase创建用户个人资料。提前感谢您的帮助。enter image description here

代码:

func createProfile(_ user: User) {
    let newUser = ["email": user.email,
                    "photo": "https://firebasestorage.googleapis.com/v0/b/frostingtest.appspot.com/o/ricks.jpg?
                    alt=media&token=d1f266e0-32aa-465d-bc42-82fdbe84881b"]

    self.databaseRef.child("profile").child(user.uid).updateChildValues(newuser) { (error, ref) in
        if error != nil {
            print(error)
            return
        }
        print("Profile Created Sucessfully")
    }
}

2 个答案:

答案 0 :(得分:0)

编译器说你的newUserString?,来自firebase文档的你的函数updateChildValues是:func updateChildValues(_ values: [AnyHashable : Any])

您可以在控制台日志中打印 newUser变量的类型吗?

答案 1 :(得分:0)

首先,这不是错误,而是警告

如果在newUser明确地发出警告,那么唯一可能的原因是字典中的user.email是可选的。

编译器建议以下修复

  1. 指定默认值:["email": user.email ?? "",...
  2. 强制展开值:["email": user.email!,...
  3. 明确投向Any["email": user.email as Any,...
  4. 当您打算更改电子邮件时,可以假定user.email不是nil,因此建议2是合适的。如果假设错误,建议1是合适的,因为字典中的nil值是荒谬的。

    不幸的是,点击对应的Fix按钮会误导性地将该建议应用于newUser,这可能会导致(真正的红色)错误。您必须手动将建议应用于user.email