Swift(新人)にはかなり新しく、C#で良い経験をしています。Swift3アラモファイアとリターン辞書でJSONデータをダウンロード
私がしようとしているのは、Alamofireを使用してAPIからJSONデータを取り込み、辞書を呼び出し元のメソッドに戻すことです。 呼び出し関数にデータを返さない関数に問題があります。私は自分の問題がダウンロードが非同期であると仮定しています。
ここに、データをダウンロードする機能のコードを示します。
import UIKit
import Alamofire
class SharedFunctions {
class func downloadWeatherData(url: String, completed: @escaping DownloadComplete) -> Dictionary<String, AnyObject>? {
let currentWeatherURL = URL(string: url)!
var workingDict: Dictionary<String, AnyObject>? = nil
Alamofire.request(currentWeatherURL).responseJSON {
response in
let result = response.result
workingDict = result.value as? Dictionary<String, AnyObject>
completed()
}
return workingDict
}
}
私は、このタイプのエイリアスを別の定数クラスに格納しています。
typealias DownloadComplete =() ->()
私の呼び出し関数は、if let dictにヒットしたときに、コードをあまり実行せずに続けます。この関数は、ビューコントローラコードから呼び出されています。
func downloadWeatherDetails(completed: @escaping DownloadComplete)
{
if let dict = SharedFunctions.downloadWeatherData(url: CURRENTWEATHERURL, completed: completed) {
if let name = dict["name"] as? String {
self._cityName = name.capitalized
}
}
completed()
}
働いていた私の古いコードは、私がAlamofireの呼び出しがdownloadWeatherDetails関数から呼び出されていたし、それがうまく働いていたダウンロードが完了したとき、データは、VCに戻りました。