Swift 检查NSDictionary中是否包含字符串

Swift 检查NSDictionary中是否包含字符串,swift,firebase,nsdictionary,Swift,Firebase,Nsdictionary,我试图检查NSDictionary中是否存在来自文本字段的输入,但我不确定如何执行此操作 let nsdict = snapshot.value as? NSDictionary let values = nsdict?.allValues 一旦我这样做了,我就不知道如何将值转换为字符串,以便使用用户输入文本字段进行检查 例如,这样做: if values.contains(userIinput.text){ print("Found

我试图检查NSDictionary中是否存在来自文本字段的输入,但我不确定如何执行此操作

            let nsdict = snapshot.value as? NSDictionary
            let values = nsdict?.allValues
一旦我这样做了,我就不知道如何将值转换为字符串,以便使用用户输入文本字段进行检查

例如,这样做:

 if values.contains(userIinput.text){
     print("Found")
 }

您可以应用过滤器。在下面的代码中,我创建了一个字典,然后过滤查找userInput.text。匹配的每个值都将存储在新的字典匹配项中。如果匹配项>0,则输入已经存在,并且您将拥有一个字典,其中的键的值为userInput.text。此外,您还可以检查它是否匹配多次。 您需要验证$0.value是否为字符串,或者userInput是否为nil,因为如果用户输入为nil,并且字典的$0.value不是字符串,则它将为并返回匹配项

let dict: [String : Any] = ["first" : "String", "Second" : 2]
let matches = dict.filter{ 
              guard let value = $0.value as? String else { return false }
              value == userInput.text 
              }
matches.count
如果你只是想检查它是否已经存在,你可以

guard let userInput = userInput else { return }
if (!dict.filter{ $0.value as? String == userInput }.isEmpty) {
    print ("Found")
}

在第一个示例中,我验证$0.value是否为字符串,如果不是,我将返回它是否不匹配;在第二个示例中,我将检查userInput是否为nil,如果不是,它将在那里完成函数(如果愿意,您可以使用,如果允许)

如果
userInput.text
nil
,则可能出错<代码>$0.0,值为?字符串如果不是
字符串
将计算为nil,比较结果将计算为
true
@Gonzo谢谢,我编辑了答案以检查userInput是否为nil,或者检查Dic的值是否为字符串,如果不是,则返回not match。问题在于此。字典是一个键:值对;如果读入的数据是String:String,那么这段代码非常棒。然而,在Firebase中,这对密钥通常是一个密钥:快照。例如,当代码在/users节点(.value)中读取时,就会发生这种情况,其中key是uid,value是一个包含更多key:value对的字典。只有当Firebase结构已知并且我们看到数据的读取方式时,才能确定这一点;.value或.childAdded。因此,虽然这段代码很好,但它并没有真正解决这个问题,因为问题中没有足够的数据。您能告诉我们快照包含哪些内容吗?快照中数据的格式取决于Firebase结构,以及您是否正在观察值为字符串、Int、Bool或其他快照的节点。另外,您是否通过.value或.childAdded进行观察?添加Firebase结构的一个片段(请以文本形式,不要图像形式)将有助于我们理解您试图获取的数据,并包含一些代码,显示您如何读取这些数据将非常有用。