2014-10-20 4 views
2

У меня возникают проблемы с пониманием, почему я не могу получить доступ к элементам в массиве после использования .appendSwift/IOS: Добавление Добавление элементов в массив, но не имеющая

Я объявляю пустой массив здесь ...

var entries:Array<Entry> = [] 

Я тогда добавлять записи в массив здесь ...

var json = self.JSONParseArray(data) 
for(var i = 0; i < json.count; i++) 
{ 
    let fName = json[i]["FirstName"] as String 
    let lName = json[i]["LastName"] as String 
    let sC = json[i]["SelectionCode"] as String 
    let id = json[i]["ID"] as String 
    let iURL = json[i]["ImageURL"] as String 
    let currEntry:Entry = Entry(fn: fName, ln: lName, sC: sC, id: id, img: iURL) 
    self.entries.append(currEntry) 
} 

Но когда я вызываю метод .Count здесь ...

println(self.entries.count) 

Я получаю «0» в качестве вывода, как если бы никакие элементы не добавлялись в массив.

Объект определяется здесь ...

class Entry { 
    var dbID:String 
    var firstName:String 
    var lastName:String 
    var selectionCode:String 
    var imageLink:String 

    init(fn:String, ln:String, sC:String, id:String, img:String){ 
     firstName = fn 
     lastName = ln 
     selectionCode = sC 
     dbID = id 
     imageLink = img 
    } 
} 

Так что, когда я пытаюсь получить доступ к элементу в массиве получить сообщение об ошибке ...

fatal error: Cannot index empty buffer 

Я поставил точку останова после цикла, который создает и добавляет объекты, и они существуют в локаторах отладчика с правильными индексами, но недоступны.

Заранее благодарен!

ответ

2

Эй, есть лучший способ сделать это. Все, что вы делаете, здесь отображает от некоторого значения к другому значению. Если вы что-то сопоставляете, вы должны рассмотреть возможность использования функции map. Вот как это сделать:

let jsonArray = self.JSONParseArray(data) 
let entries: [Entry] = jsonArray.map { json: [NSObject: AnyObject] in 
    let fName = json["FirstName"] as String 
    let lName = json["LastName"] as String 
    let sC = json["SelectionCode"] as String 
    let id = json["ID"] as String 
    let iURL = json["ImageURL"] as String 
    return Entry(fn: fName, ln: lName, sC: sC, id: id, img: iURL) 
} 
Смежные вопросы