2
votes

I have a dictionary with multiple dictionary data :

{
    1455201094707 =     {
    };
    1455201116404 =     {
    }: 
    1455201287530 =     {
    };
}

I have to add all these dictionaries to an array in swift. How to iterate dictionary as :

for let tempDict in dataDictionary
{
     self.tempArray.addObject(tempDict)
}

Error "let pattern cannot appear nested in an already immutable context"

for tempDict in dataDictionary as! NSMutableDictionary
{
     self.tempArray.addObject(tempDict)
}

Error : Argument type element(aka(key:AnyObject, value:AnyObject)) argument type does not conform to expected type anyobject

for tempDict in dataDictionary as! NSMutableDictionary
{
     self.tempArray.addObject(tempDict as! AnyObject)
}

Error: Could not cast value of type '(Swift.AnyObject, Swift.AnyObject)' (0x1209dee18) to 'Swift.AnyObject' (0x11d57d018).

for tempDict in dataDictionary
{
     self.tempArray.addObject(tempDict)
}

Error: Value of Type AnyObject has no member generator

Edit

I want the final array as :

(
  {
    1455201094707 =     {
    };
  }
  {
     1455201116404 =     {
     }:
  } 
)   

What is the correct way to implement this?

Any help will be appreciated.....

I have used code :

var tempArray:[NSDictionary] = []

    for (key, value) in tempDict {
        tempArray.append([key : value])
    }

Error: value of type AnyObject does not conform to expected dictionary key type NSCopying

code :

let tempArray = tempDict.map({ [$0.0 : $0.1] }) 

Error : type of expression is ambiguous without more context

2

2 Answers

5
votes

First of all, when you use

for let tempDict in dataDictionary {
     self.tempArray.addObject(tempDict)
}

Swift gives you tuple like (key, value) in tempDict.

So you should iterate like this

for (key, value) in sourceDict {
     tempArray.append(value)
}

Note: I used here native swift structures, and my advise - to use them as often as possible (instead of ObjC ones)

Or you can use map-function on dictionary.

let array = sourceDict.map({ $0.1 })

Edit. For

(
  {
    1455201094707 =     {
    };
  }
  {
     1455201116404 =     {
     }:
  } 
) 

use

for (key, value) in sourceDict {
     tempArray.append([key : value])
}

or

let array = dict.map({ [$0.0 : $0.1] })

Note. if you use NSDictionary you should cast it to swift Dictionary

if let dict = dict as? [String: AnyObject] {
    let array = dict.map({ [$0.0 : $0.1] })
    print(array)
}
-2
votes
  1. Get all keys from the dictionary, for this NSDictionary has property allKeys.

  2. Loop all keys, and add object for the key to the array.

  3. Before the all steps above, read documentation!

Good luck!