当前位置: 首页 > 面试题库 >

比较textfield.text和firebase字符串swift

阎扬
2023-03-14
问题内容

我在Firebase中有一个数据库,该数据库将有单独的用户节点。在每个用户的节点中将是与他们有关的数据,并且将是私有的。除此之外,我还想创建一个仅包含已注册电子邮件集合的节点。原因是当用户使用“登录VC”并输入电子邮件时。如果电子邮件已注册,则图像视图将变为绿色。但是,如果电子邮件不在数据库中(或与电子邮件地址格式不匹配),该图像将为红色。

我先前的问题的先前答案表明我需要更改“。”。到电子邮件地址中的“,”。因此,@ gmail.com将存储为gmail.com

我失望了。

FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in

    if error == nil {

      let email = firstContainerTextField.text ?? ""

      let newString = email.replacingOccurrences(of: ".", with: ",", options: .literal, range: nil)

      self.ref.child("users").child("allUsers").child(newString).setValue(true)

      self.ref.child("users").child((user?.uid)!).setValue(["Email": email])

      FIRAuth.auth()!.signIn(withEmail: email,
                             password: password)

    } else {
      //registration failure
    }

这是来自“新用户VC”(部分)的代码。

因此,在Firebase控制台上,显示“用户”和“ allUsers”的节点看起来像这样

users
    allUsers
        bob@bob,com: true
        ted@ted,com: true

“真实”部分只是为了让我可以将bob @ bob,com放入数据库中……真实部分永远不会用于任何事情。

老实说,在VC中登录时,我不知道该怎么办

先前的答案说要使用

hasChildren()

然后我用它,然后用谷歌搜索该怎么做,我尝试使用类似的东西

ref.child("users").child("allUsers").queryEqual(toValue: newString)
  .observe(.value, with: { snapshot in

if snapshot.hasChildren() {

    for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
    ....


}



  });

但是我似乎无法解决任何问题。

我怎样才能简单地查看textfield.text ==是否已经存储在Firebase中的电子邮件?

(比较时,我确实将’。’转换为’,’)


问题答案:

请不要使用电子邮件地址作为密钥。电子邮件地址是动态的,并且可能会更改(就像用户要更改它一样),如果这样做,您将一团糟,因为直接使用该电子邮件的每个节点都将被删除并重新创建。

最佳实践是将密钥与它们包含的数据解除关联。

这是要使用的结构

emails
  -Yiaisjpa90is
    email: "dude@test.com"
  -Yijs9a9js09a
    email: "thing@test.com"

那么您只需在电子邮件节点中查询要查找的电子邮件,并进行相应处理(如果存在)。

还有一些代码

emailsRef.queryOrdered(byChild: "email").queryEqual(toValue: "dude@test.com")
         .observe(.value, with: { snapshot in
     if snapshot.value is NSNull {
        print("the snapshot was null, no email found")
     } else {
        print("email was found, YIPEE")
     }  
})

为了完整起见,使用起来会更加快速

if snapshot.exists() {
  print("found it")
} else {
  print("no email found")
}


 类似资料:
  • 我有字符串数组:15MB、12MB、1TB、1GB。我想通过遵循MB小于GB和TB的规则来对它们进行词典比较。所以最后我想得到:12MB,15MB,1GB,1TB。我找到了一个比较字母的方法: 我在考虑用数字和字母拆分字符串,但我如何用字母“MB”对它们进行排序。然后根据他们的数字。我是使用两个比较器还是其他什么?

  • 问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran

  • 主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相

  • 问题内容: 我有一个node.js应用程序,它可以提取一些数据并将其粘贴到对象中,如下所示: 当我基于存储的ID执行if / then时,比较永远不会成立: 当我执行两个ID的console.log时,它们完全匹配: 我以为这是某种数据类型问题,但是我不确定如何将result.userId转换为数据类型,从而导致上述比较正确,而我的外包大脑(又名Google)无法提供帮助。 问题答案: Mongo

  • 问题内容: 在继续之前: 我知道我们应该使用.equals()比较内容。 我现在只是在谈论以下情况下的实际引用是否相同… 说我们有以下内容: 我认为应该是正确的,因为在字符串池中,对“字符串”的引用应该与str1和str2相同,现在都是“字符串”。它应该为true,但最终为 false 。 我尝试过,这次返回了 true 。然后我尝试了: 同样是 System.out.println(“ str”

  • 我有一个字符串和一个int,让我们说:and。查看它们是否相同的最快方法是什么,or(或者有更快的方法吗?)? 这是Integer的源代码。parseInt和String。等于