Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何处理缺少关键字的词典_Ios - Fatal编程技术网

Ios 如何处理缺少关键字的词典

Ios 如何处理缺少关键字的词典,ios,Ios,我有一个带有信息(姓名、年龄等)的字典,我需要在tableView中使用它来填充profile viewController 我的问题是,例如,我不知道用户是否添加了他的名字,因此也不知道是否有key=“name”。 所以当我查字典的时候 print("firstname: \(userDocument["name"]!["first"] as! String)") 如果密钥不存在,应用程序将崩溃 我如何避免这种情况?我应该使用if let打开所有钥匙吗? 我试过: print("firstn

我有一个带有信息(姓名、年龄等)的字典,我需要在tableView中使用它来填充profile viewController

我的问题是,例如,我不知道用户是否添加了他的名字,因此也不知道是否有key=“name”。 所以当我查字典的时候

print("firstname: \(userDocument["name"]!["first"] as! String)")
如果密钥不存在,应用程序将崩溃

我如何避免这种情况?我应该使用if let打开所有钥匙吗?

我试过:

print("firstname: \(userDocument["name"]?["first"] as? String)")
但是我得到了可选的(Elon Musk),我不知道那是什么标签.text

非常感谢您的帮助!谢谢你

怎么样:

var defaultName = "unspecified"
print("firstname: \((userDocument["name"]?["first"] as? String) ?? defaultName)")
这将检查
(userDocument[“name”]?[“first”]as?String)
是否包含值,如果不包含值,则提供替换(
defaultName
)。您可以将替换文本更改为您认为合适的任何文本。

如何:

var defaultName = "unspecified"
print("firstname: \((userDocument["name"]?["first"] as? String) ?? defaultName)")
这将检查
(userDocument[“name”]?[“first”]as?String)
是否包含值,如果不包含值,则提供替换(
defaultName
)。您可以将替换文本更改为您认为合适的任何文本。

该选项!意思是“如果它不存在,请崩溃”。所以你写的东西崩溃了,因为你告诉编译器让它崩溃。如果你不想撞车,就不要那样做

使用?在正确的位置,这将为您提供可选值。那么你可以使用可选的??defaultValue,在可选值为nil的情况下替换一个值,或者在不存在该值的情况下执行任何适当的操作

!意思是“如果它不存在,请崩溃”。所以你写的东西崩溃了,因为你告诉编译器让它崩溃。如果你不想撞车,就不要那样做


使用?在正确的位置,这将为您提供可选值。那么你可以使用可选的??defaultValue,在可选值为nil的情况下替换一个值,或者在不存在该值的情况下执行任何适当的操作

我建议您,在填充tableview之前规范化您的数据,您可以通过任何方式检查您的密钥是否存在,然后才能读取该密钥的值?@mohamad farhand是的,但我应该如何做?您可以通过以下方式进行检查:if([dic objectforkey:“yourKey”]考虑设计一个模型来传递所有的密钥,但是使用一个空字符串用于<代码>无值< /代码>。这避免了大量的可选绑定开销。我建议您,在填充TabLVIEW之前,对数据进行归一化,任何可以检查密钥的方法都存在或不在之后,您可以读取该密钥的值吗?@穆罕默德-法兰德-是的,但是我该怎么办?t?您可以检查:if([dic objectforkey:“yourKey”]考虑将模型设计为传递所有键,但对
无值
使用空字符串。这避免了大量可选的绑定开销。