2014-11-12 2 views
0

Я создал массив словаря, но у меня есть ошибка, когда я попытался добавить свой объект (словарь) в свой массив. У меня есть эта ошибка «AnyObject не имеет элемент с именем" добавить»Добавить словарь в массив в Swift

var posts=[Dictionary<String,AnyObject>]() 

var post=Dictionary<String,AnyObject>() 
var attachment=Dictionary<String,AnyObject>() 

... 

post=["id":"a", "label":"b"] 
attachment=["id":"c", "image":"d"] 
var newPost = [post, attachment] 

posts.append(newPost) <- AnyObject does not have a member named 'append' 

Я не понимаю. Может быть, я не инициализировал массив правильно?

UPDATE/решаемые

var posts=[Dictionary<String,Dictionary<String,AnyObject>>]() 

var post=Dictionary<String,AnyObject>() 
var attachment=Dictionary<String,AnyObject>() 

... 

post=["id":"a", "label":"b"] 
attachment=["id":"c", "image":"d"] 
var newPost = ["post":post, "attachment":attachment] 

posts.append(newPost) <- AnyObject does not have a member named 'append' 

EDIT: newPost является экземпляром словаря и вывешивает массив словарей

+0

Это работает для меня в быстрой игровой площадке без протеста и выглядит хорошо. Используете ли вы последний xcode? – jaime

+0

2-я версия кода работает нормально. Пожалуйста, укажите более подробную информацию, если она не работает для вас. – Antonio

ответ

5

append является добавление элемента, в то время как вы пытаетесь добавить еще один array (post - массив словарей). Вы можете использовать += оператор:

posts += newPost 

или использовать extend метод (который эквивалентен оператору +=):

posts.extend(newPost) 

или добавлять элементы по отдельности:

posts.append(post) 
posts.append(attachment) 
+0

Когда я использую сообщения + = newPost, у меня есть ошибка «[(Словарь )] не идентичен UInt8". Я нашел решение с NSMutableArray и addObject, но мне это не нравится, потому что моя задача - закодировать все в Swift. – cmii

+0

Как насчет использования 'extend'? Какой тип 'newPost'? Является ли это массивом или единственным экземпляром словаря? – Antonio

+0

newPost - это единственный экземпляр словаря и помещает массив словарей (см. Мое редактирование). Когда я делаю arrayOfposts.extend (postToAdd), у меня есть эта ошибка: Словарь > не идентичен (String, Dictionary ). Я допустил ошибку с типами, но где ? – cmii

0

Если вы хотите, чтобы каждое сообщение было массивом сообщений и аргументов:

var posts=[[Dictionary<String,AnyObject>]]() 

Кроме того, вы можете определить тип для почты и вложения, не создавая пустые объекты:

var post:Dictionary<String,AnyObject> 
var attachment:Dictionary<String,AnyObject>