我有一个[String : NSTimer]
类型的字典。
当我使用断点在控制台中打印它时,我得到以下结果:
▿ 2 elements // Does this means 2 key-value pairs?
▿ [0] : 2 elements // What does this 2 element mean here?
- .0 : "https://github.jack.com" // what does .0 mean here?
▿ [1] : 2 elements
- .0 : "https://github.john.com"
但是,如果我使用Xcode中的变量视图,我可以看到对象的值为:
[0] (key: String, value: NSTimer)
key String "https://github.jack.com"
value NSTimer 0x00006100001726c0
[1] (key: String, value: NSTimer)
key String "https://github.john.com"
value NSTimer 0x00006000001756c0 // contrary to console, value is shown
这是一个错误吗?或者这是打印字典时的预期行为?如果是这样,为什么会这样?
[0],[1]也只是为了区分键?因为字典没有顺序。正确?
PS我还在我的代码中写了一些问题
答案 0 :(得分:2)
首先,看起来你没有使用最新的(稳定的)Xcode,因为我的Xcode(版本8.1,8B62)说:
Swift编译错误:'NSTimer'已重命名为'Timer'
这个可怕的例子确实显示了“正常”输出:
let timerA = Timer(timeInterval: 123, repeats: false, block: { _ in })
let timerB = Timer(timeInterval: 123, repeats: false, block: { _ in })
let soExample: [String:Timer] = ["a":timerA, "b":timerB]
print(soExample)
dump(soExample)
在控制台中显示:
// ["b": <__NSCFTimer: 0x6000001738c0>, "a": <__NSCFTimer: 0x600000173440>]
// ▿ 2 key/value pairs
// ▿ (2 elements)
// - .0: "b"
// - .1: <__NSCFTimer: 0x600000169180> #0
// - super: NSTimer
// - super: NSObject
// ▿ (2 elements)
// - .0: "a"
// - .1: <__NSCFTimer: 0x600000169240> #1
// - super: NSTimer
// - super: NSObject
关于调试打印:
是的,您应该看到“2个键值对”。
然后是2个元素的元组:(键,值)...其中.0
是第一个元组元素的简写。 (见The Swift Programming Language: Tuples)
确实,dictionaries have no ordering。
字典是键值关联的无序集合。
...所以我同意你的观点,在Xcode的Variables视图中,它的[0]和[1]可能会让新手感到困惑 - 正如你所看到的,控制台中的打印输出不会混淆。 ; - )