2017-02-20 39 views
2

Я пытаюсь установить текст на ярлыке из api, но кажется, что функция даже не вызвана. Пожалуйста, обратитесь к фрагменту ниже. Что-то не так с этим?Alamofire скачать с JSON API

EDIT: typealias DownloadComplete =() ->()

var date: String = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    timeLbl.text = date 

    // Do any additional setup after loading the view. 
} 

func downloadTimeData(completed: @escaping DownloadComplete) { 
    //Downloading forecast weather data for TableView 
    Alamofire.request(APIURL).responseJSON { response in 

     let result = response.result 

     if let dict = result.value as? Dictionary<String, AnyObject> { 
      if let currentDate = dict["fulldate"] as? String { 
       self.date = currentDate 
       print(self.date) 
       print("xxx") 
      } 
     } 
    completed() 
    } 
} 

ответ

0

В коде вы публикуемую вы не вызывая downloadTimeData(completed:) везде.

Вы можете сделать это в viewDidAppear(_:), например:

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    downloadTimeData { 
     // The request has completed 
     timeLbl.text = date 
    } 
} 

Обратите внимание, что вы может необходимость немного изменить вызов, в зависимости от того, как DownloadComplete определяется.

+0

Я отредактировал его и определил DownloadComplete –

+0

@HonzaValta i обновил свой ответ. – naglerrr

0

Вы устанавливаете timeLbl.text сразу на загрузку страницы в viewDidLoad, но вы не сказали приложению ничего делать.

Вы должны двигаться downloadTimeData к viewDidLoad, и в завершении, установите «timeLbl.text = дата»

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

Устанавливаем ли мы одну этикетку? Или целый стол из ярлыков?

Я изменил некоторые синтаксис, чтобы быть «swiftier»

var date = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 
    //call downloadTimeData here 
    downloadTimeData() { 
    //once we are in completion, this means internet call finished, so set label now 
    self.timeLbl.text = date 
    } 
} 

func downloadTimeData(completed: @escaping DownloadComplete) { 
//Downloading forecast weather data for TableView 
    Alamofire.request(APIURL).responseJSON { response in 
    guard let dict = response.result.value as? [String: AnyObject], let currentDate = dict["full date"] as? String else { 
     //handle error here if response fails to give you good data 
     completed() 
     return 
    } 
    self.date = currentDate 
    print(self.date) 
    print("xxx") 
    completed() 
    } 
} 
+0

Я размещаю это DownloadComplete, чтобы убедиться, все ясно. –

+0

Хорошо, я скорректировал свой ответ. –

1

я понял это с простым и легким способом, через alamofire documetation.

override func viewDidLoad() { 
    super.viewDidLoad() 

    Alamofire.request(APIURL).responseJSON { response in 
     print(response.result) // result of response serialization 
     let result = response.result 

     if let dict = result.value as? Dictionary<String, AnyObject> { 
      let currentDate = dict["fulldate"] as? String 
      self.timeLbl.text = currentDate 
      } 

    } 
}