私の目標は、Alamofireの準備ができたら、値を返すことです。 以下のスクリプトは私のシングルトンの一部で、私のviewControllerによって呼び出されます。私は周りを見渡して、完了ハンドラがAlamofireで実装されている場所の例があります。Alamofire Swift 3で配列の値を返す方法は?
シングルトン:
func getPeople() -> [Person] {
var persons:[Person] = []
Alamofire.request(requestURL, method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
if let json = response.result.value as? Dictionary<String, Any> {
for field in json {
// Reference to person class
let person = Person()
// Properties will be fill in
...
...
// Add properties to the person object
persons.append(person)
}
}
}
return persons
}
のViewController
私は私のViewController.swift
に機能上記の呼び出しと人の列に追加します。
var persons = [Person]()
override func viewDidLoad() {
super.viewDidLoad()
let request = requestHandler()
self.persons = request.getPeople()
}
Alamofireはasynchroonになるので、私は人の配列を返さない。私のviewcontroller.swift
から呼び出される関数に値persons
を返すにはどうすればよいですか?私はスイフト3を使用しています。
ありがとうございます。
succesとfailureパラメータで何が起こっているのか教えてください。リクエストがうまくいって失敗した場合はsuccesが呼び出されますが、 '(([People]) - > Void)?'と '((Error) - > Void)私にはっきり分かりません。 – Caspert
@Caspert私はちょうどクロージャの詳細について答えを更新しました。 – alexburtnik
説明をありがとう。私が理解していない唯一のものは、あなたが閉鎖に何も通らないのですか?そのための例がありますか?なぜなら、私がそれを理解すれば、Voidはデフォルトで何も返さないからです。 – Caspert