- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个字典,我想使用它的一些值作为另一个字典的键:
let key: String = String(dictionary["anotherKey"])
在这里,dictionary["anotherKey"]
是 42
但是当我在调试器中打印 key
时,我看到以下内容:
(lldb) expression print(key)
Optional(42)
这怎么可能?据我了解,String()
构造函数不 返回一个可选值(并且当我编写 let key 时,编译器不会提示 : String
而不是 let key: String?
)。有人可以解释这里发生了什么吗?
作为旁注,我目前正在使用 description()
方法解决这个问题。
最佳答案
这是设计使然 - 这是 Swift 的 Dictionary
的实现方式:
Swift’s
Dictionary
type implements its key-value subscripting as a subscript that takes and returns an optional type. [...] TheDictionary
type uses an optional subscript type to model the fact that not every key will have a value, and to give a way to delete a value for a key by assigning a nil value for that key. (link to documentation)
您可以在 if let
构造中解包结果以摆脱可选,如下所示:
if let val = dictionary["anotherKey"] {
... // Here, val is not optional
}
如果您确定值在那里,例如,因为您在几步之前将它放入字典中,您也可以使用 !
运算符强制解包:
let key: String = String(dictionary["anotherKey"]!)
关于ios - 为什么 print() 将我的字符串打印为可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36744537/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!