Я искал, как это сделать, но что-то просто не имеет смысла для меня, и я не могу этого сделать. Все, что мне нужно сделать, это получить данные из моей json-сессии (если это то, что вы называете). Я начал программировать около 3 недель назад, поэтому, пожалуйста, мне нужно проложить условия. Я понимаю, что это, вероятно, станет отмеченным как дубликат, но большинство ответов на эту/связанные темы для других языков, и я едва понимаю быстро, поэтому они мне не очень помогают.возвращаемое значение из сеанса json для использования за пределами сеанса
Я потратил часы, пытаясь найти ответ, и поскольку я новичок, я не знаю, правильно ли я ищу, что я ищу. Я также пробовал читать библиотеку разработчиков iOS, но я не понимаю, что это говорит мне, или я не нашел нужную секцию, потому что я все еще не могу понять это. Пожалуйста, попробуйте объяснить это, вместо того чтобы отправлять мне читать другие ресурсы.
вот моя функция
func parseData() {
let urlString = "http://heroesjson.com/heroes.json"
let session = NSURLSession.sharedSession()
let url = NSURL(string: urlString)!
session.dataTaskWithURL(url) { (data: NSData?, response:NSURLResponse?, error: NSError?) -> Void in
guard let responseData = data else { return }
var json: [[String: AnyObject]]!
do {
json = try NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.AllowFragments) as! [[String: AnyObject]]
}
catch {
//handle error
}
var arrayToReturn = [Hero]()
for element in json {
let hero = Hero(fromDictionary: element as! [String: AnyObject])
arrayToReturn.append(hero)
}
}.resume()//Closes Session.dataTaskWithURL
} //Closes parseData()
цель состоит в том, чтобы получить переменную JSon в моем сделай заявление, так что я могу разобрать его за пределами функции или получить мой «arrayToReturn», так что я могу сохранить его в глобальном переменную, которую я использую.
Если я правильно понял, я не могу просто присвоить значение (arrayToReturn) моей глобальной переменной (героям), потому что это асинхронный запрос, поэтому он просто возвращает nil, потому что команда вызывается до завершения запроса. Я думаю, что мне нужно использовать обработчик завершения или функцию обратного вызова. Я не понимаю разницу между ними и не понимаю как или где для их реализации.
Кроме того, я тоже не очень понимаю этот код, я просто знаю, что нужно получить то, что я хочу.
session.dataTaskWithURL(url) { (data: NSData?, response:NSURLResponse?, error: NSError?) -> Void in
«(данные: NSData ?, ответ: NSURLResponse ?, ошибка: NSError)» выглядит как параметры, но они, кажется, не быть прикреплены к функции, так что не имеет смысла для меня
«-» Пустота «Не имеет смысла для меня, потому что -> означает возвращение того, что следует, но пустота указывает мне, что его ничего не возвращает, так почему бы просто не оставить его вместе?
"-> Пустота в" Какое значение здесь здесь? что это означает/сигнал?
Я читал, что весь раздел ранее сегодня, и я до сих пор не понимаю, как сделать то, что я спрашиваю ... вот почему я прибегнул спросить здесь. Если вы можете быть более конкретным, какую часть может помочь. – Apple
Я отредактировал свой ответ, может быть, теперь это имеет смысл. Если это помогает, обязательно отметьте его как лучший ответ. Благодарю. – itsProf
Спасибо! Я редактировал свой код, и он работает. Мне просто нужно выяснить, как запустить этот код в начале моей программы, прежде чем остальная часть начнется, потому что программе нужны все данные, которые заполняются из этого json-синтаксиса – Apple