如何在swift 2.0中创建NSMutableDictionary

Bha*_*n_m 11 swift swift2

最近我将Xcode更新为7,它包含swift 2.0编译器.在此之前,我用旧版本的swift制作了我的项目.在那个版本中我创造了NSMutableDictionary像波纹管

    let dictParams:NSMutableDictionary? = ["test" : "test", 
        "username" : txtEmail.text, 
        "password" : txtPassword.text, 
        "version" : "1.0", 
        "appId" : "1", 
        "deviceId" : "fasdfasdfrqwe2345sdgdfe56gsdfgsdfg"
    ];
Run Code Online (Sandbox Code Playgroud)

在上面的代码中txtEmail.text,txtPassword.text是我的文本字段,并在运行时填充tha值.

这段代码在旧版本的swift中正常工作,但在更新到swift 2.0后,它给了我一个像下面的错误

Cannot convert value of type '[String : String?]' to specified type 'NSMutableDictionary?'
Run Code Online (Sandbox Code Playgroud)

有什么问题请指导我.

Duc*_*cky 19

只需打开Xcode 7中的类NSMutableDictionaryNSDictionary接口,您就可以轻松地看到底层类型实际上是[NSObject: AnyObject].这意味着价值不可能nil.

展开文本值,txtEmail.text!或者txtPassword.text!看起来不错,可以帮助您摆脱编译错误,但这是一个糟糕的选择,因为技术上text属性UITextField是可选的,在这种情况下您的应用程序可能会崩溃!

这样做是为了您的安全:

let dictParams: NSMutableDictionary? = ["test" : "test", 
    "username" : txtEmail.text ?? "", // Always use optional values carefully!
    "password" : txtPassword.text ?? "",
    "version" : "1.0", 
    "appId" : "1", 
    "deviceId" : "fasdfasdfrqwe2345sdgdfe56gsdfgsdfg"
]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果使用不重要NSMutableDictionary,请考虑使用Swift字典,如下所示:

var mutableDictionary = [String: AnyObject] 

// OR this if the value can be nil
var mutableDictionary = [String: AnyObject?] 
Run Code Online (Sandbox Code Playgroud)