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

在Swift中为可选字典分配值

罗均
2023-03-14
问题内容

我在Swift中使用可选字典发现了一些令人惊讶的行为。

var foo:Dictionary<String, String>?

if (foo == nil) {
    foo = ["bar": "baz"]
}
else {
    // Following line errors with "'Dictionary<String, String>?' does
    // not have a member named 'subscript'"
    foo["qux"] = "quux"
}

我已经做了很多事情,试图找出我可能会缺少的东西,但是除了使字典不是可选的以外,似乎没有什么能使此代码正常工作。我想念什么?

我能得到的最接近的是以下内容,但它当然是荒谬的。

var foo:Dictionary<String, String>?

if (foo == nil) {
    foo = ["bar": "baz"]
}
else if var foofoo = foo {
    foofoo["qux"] = "quux"
    foo = foofoo
}

问题答案:

灯泡时刻是您意识到可选词典不是词典的时候。可选的东西不是那个东西!这是一个可选的!仅此而已。可选本身是一种类型。Optional只是一个枚举,包装了可能的情况nil和一些值。包装的值是一个完全不同的对象,存储在内部。

因此,Optional的 任何事物 都不会像该事物的类型那样起作用。不是那件事!它只是可选的。解决问题的唯一方法是解开包装。

隐式解开的Optional也是如此;区别只是隐式展开的Optional愿意“自动”产生(暴露)包装的值。但实际上,它仍然被包裹着。而且,正如布赖恩·陈(Bryan
Chen)所观察到的,它是一成不变的。Optional只是为您拿着它-并没有给您一个使用它的地方。



 类似资料:
  • 问题内容: 我试图迅速过滤字典: 上面的过滤器代码在swift 2下编译,但产生以下错误: 无法将类型[[(String,String)]’的值分配给类型’[String:String]’的值 这是swift编译器中的错误,还是不是快速过滤字典的正确方法? 提前非常感谢您! 问题答案: 此问题已在Swift 4中修复 在Swift 4中,过滤后的字典返回字典。 Swift 2和3的原始答案 问题是

  • 问题内容: 我对Xcode在《 Swift编程语言指南》中给我进行此实验的答案感到有些困惑: 我知道随着字典的使用,最大的数字被设置为变量。但是,我对为什么Xcode会说要根据每次测试设置5次,1次或3次感到困惑。 查看代码时,我发现应该单独在“ Prime”中将其设置6次(2、3、5、7、11、13)。然后,它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大数字,该数字当前已从“ Pri

  • 问题内容: 我在玩苹果的新 Swift 编程语言,遇到了一些问题… 当前,我正在尝试读取plist文件,在Objective-C中,我将执行以下操作以将内容作为NSDictionary获取: 如何在Swift中将plist作为字典? 我假设我可以通过以下方式获取plist的路径: 当这可行时(如果正确的话):如何将内容作为字典? 还有一个更笼统的问题: 是否可以使用默认的 NS ** 类?我想是…

  • Swift 4中的字典是用于存储相同类型的无序值列表。 Swift 4进行了严格的检查,不允许在字典中输入错误的类型。 Swift 4字典使用称为键的唯一标识符来存储值,通过相同的键引用和查找值。与数组中的项目不同,字典中的项目没有指定的顺序。 当需要根据标识符(键)查找值时,可以使用字典。 字典键可以是整数,也可以是字符串,但它在字典中作为键是唯一的。 如果将创建的字典分配给变量,则它始终是可变

  • Swift 字典用来存储无序的相同类型数据的集合,Swift 字典会强制检测元素的类型,如果类型不同则会报错。 Swift 字典每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符。 和数组中的数据项不同,字典中的数据项并没有具体顺序。我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样。 Swift 字典的key

  • 问题内容: 我是Swift的新手,正在上课学习iOS编程。我发现自己很困惑如何在字典数组中搜索字符串值并将字符串值转储到数组中。这是从我的Xcode游乐场获取的。 我正在尝试找出方法:1)搜索字典数组2)将搜索结果转储到数组(由我创建) 这些是角色字典。 这是上面列出的字符词典的数组。 这是我要编写的功能。 对于在此方面取得进展的任何帮助,我将不胜感激。我已经为示例进行了挖掘,但是我很快就会找到一