2015-08-03 4 views
0

У меня есть функция под названием getEarthquake(), который анализирует JSON с помощью SwiftyJSON и возвращает все организованной информации (например, title, magnitude и time) в NSMutableArray называется info.Вызов функции внутри функции и возвращает строку

var info = NSMutableArray() 

    func getEarthquake(completion: (results : NSMutableArray) ->Void) { 
     DataManager.getEarthquakeDataFromFileWithSuccess { 
      (data) -> Void in 
      let json = JSON(data: data) 
      if var JsonArray = json.array { 
       JsonArray.removeAtIndex(0) 
       for appDict in JsonArray { 
        var mag: String? = appDict["mag"].stringValue 
        var title: String? = appDict["title"].stringValue 
        var time: String? = appDict["time"].stringValue 
        var information = AppModel(title: title, magnitude: mag, time1: time) 
        info.addObject(information) 
       //  info.removeRange(3...48) 

        completion(results: info) 
       } 
      } 

     } 
    } 

Я создал другую функцию под названием getEarthquake2() которая вызывает getEarthquake() и извлекающий info. В getEarthquake2() Я хочу, чтобы он возвращал только title1, что является String. Однако мои попытки приводят только к title1: nil к моменту возврата.

func getEarthquake2()->String? { 
    var title1: String? 
    getEarthquake{ (info) in 

     var title = info[0].title 
     title1 = title 

    } 

    return title1 

} 

Может кто-то направить меня в нужном направлении при внесении getEarthquake2() успешно вернуться title1, которая не возвращает ноль? (Я уверен, что это не вопрос Info будучи ноль, так как она их получает в конце getEarthquake().)

Мой AppModel.swift файл, где я могу легко организовать мой код:

import Foundation 
class AppModel: NSObject, Printable { 
    let title: String 
    let magnitude: String 
    let time1: String 

    override var description: String { 
     return "TITLE: \(title), TIME: \(time1), MAG: \(magnitude)" 
    } 
    init(title: String?, magnitude: String?, time1: String?) { 
     self.title = title ?? "" 
     self.time1 = time1 ?? "" 
     self.magnitude = magnitude ?? "" 
    } 

} 

Мои DataManager.swift файл, в котором я называю веб-сервис:

import Foundation 
let earthquakeURL = "http://www.kuakes.com/json/" 
class DataManager { 
    class func getEarthquakeDataFromFileWithSuccess(success: ((websiteData: NSData) -> Void)) { 
     //1 
     loadDataFromURL(NSURL(string: earthquakeURL)!, completion:{(data, error) -> Void in 
      //2 
      if let urlData = data { 
       //3 
       success(websiteData: urlData) 
      } 
      else { 
       println("nothing") 
      } 
     }) 
    } 
    class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) { 
     var session = NSURLSession.sharedSession() 

     // Use NSURLSession to get data from an NSURL 
     let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in 
      if let responseError = error { 
       completion(data: nil, error: responseError) 
      } else if let httpResponse = response as? NSHTTPURLResponse { 
       if httpResponse.statusCode != 200 { 
        var statusError = NSError(domain:"com.kuakes", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) 
        completion(data: nil, error: statusError) 
       } else { 
        completion(data: data, error: nil) 
       } 
      } 
     }) 

     loadDataTask.resume() 
    } 







} 

ответ

0

в getEarthquake2 вы забыли бросить свой объект AppModel:

func getEarthquake2() -> String? { 
    var title1: String? 

    getEarthquake { info in 
     let title = (info[0] as! AppModel).title 
     title1 = title 
    } 

    return title1 
} 
+0

Прошу прощения, я набрал свой вопрос в спешке, и я неправильно задал свой вопрос. My bad :(Заголовок не возвращает nil, он успешно заполняется из моего информационного массива. Моя проблема в том, что title1 возвращает nil в конце 'getEarthquake2()'. Любая идея, как я могу это исправить? – videoperson

+0

@videoperson, но это doesn 't return 'nil' для меня, пожалуйста, проверьте это на игровой площадке Xcode: https://gist.github.com/marcioadr88/65a5b210b960e52f987f –