I have already updated to XCode 8 and now I need to convert my code from Swift 2 to Swift 3.
Before, when I want to convert NSDictionary
to Dictionary
, I just wrote the following:
let post_paramsValue = post_params as? Dictionary<String,AnyObject?>
where post_params
is NSDictionary
.
But now with Swift 3, I am receiving this error:
NSDictionary is not convertible to Dictionary
Why? What's changed?
I've also tried the following:
let post_paramsValue = post_params as Dictionary<String,Any>
But that gives this error:
I've also tried the following:
let post_paramsValue = post_params as Dictionary<String,Any>
Where I declare NSDictionary
instead of NSDictionary!
, but it doesn't work; I got this error:
I've also tried the following:
let post_paramsValue = post_params as Dictionary<String,Any>!
But I received this error:
Use -mutableCopy . NSDictionary *d; NSMutableDictionary *m = [d mutableCopy]; Note that -mutableCopy returns id ( Any in Swift) so you will want to assign / cast to the right type. It creates a shallow copy of the original dictionary.
NSDictionary creates static dictionaries, and NSMutableDictionary creates dynamic dictionaries.
An object representing a dynamic collection of key-value pairs, for use instead of a Dictionary variable in cases that require reference semantics.
NSDictionary
in Objective-C has always non-optional values.AnyObject
has become Any
in Swift 3.NSDictionary
can be bridge cast to Dictionary
let post_paramsValue = post_params as Dictionary<String,Any>
If the source NSDictionary
is an optional you might use as Dictionary<String,Any>?
or as? Dictionary<String,Any>
or as! Dictionary<String,Any>
or as Dictionary<String,Any>!
depending on the actual type of the NSDictionary
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With