Swift字典错误?

vrw*_*wim 11 dictionary swift

所以我在Swift开始了一个项目,我遇到了这个问题:

这段代码有效:

var dictionary = ["a":"valueOfA","b":"valueOfB","c":"valueOfC"]
println(dictionary)
dictionary["c"] = "newValOfC"
println(dictionary)
Run Code Online (Sandbox Code Playgroud)

这不是:

var dictionary = [:]
dictionary = ["a":"valueOfA","b":"valueOfB","c":"valueOfC"]
println(dictionary)
dictionary["c"] = "newValOfC"
println(dictionary)
Run Code Online (Sandbox Code Playgroud)

给出错误:

Playground execution failed: error: <REPL>:35:17: error: cannot assign to the result of this expression
dictionary["c"] = "newValC"
~~~~~~~~~~~~~~~ ^
Run Code Online (Sandbox Code Playgroud)

请注意,这不是常量值

那么为什么不行

dictionary = ["a":"valueOfA","b":"valueOfB","c":"valueOfC"]
Run Code Online (Sandbox Code Playgroud)

给出错误?

Jia*_*aro 11

由于上下文没有提供足够的信息来推断类型,你需要明确地将它命名为字典,否则swift假定它是一个NSDictionary(我不清楚为什么会这样.我假设为了更好的obj-c兼容性) :

以下代码均有效:

// Playground
import UIKit

var str:NSString = "Hello, playground"

var d0 = [:]
var d1: Dictionary = [:]

d0.setValue(UIWebView(), forKey: "asdf")

d1["asdf"] = 1
d1["qwer"] = "qwer"
Run Code Online (Sandbox Code Playgroud)