私はMVCモデルでアプリケーションを構築しています。 私は遅延読み込み技術を使用して変数を埋めます。 (モデル) そして、この変数は1つのUIViewController(コントローラ)によって行われていますスイフト:レイジーロード変数対MVCモデル?
しかし、モデルアクションが完了したときに、表示コントローラを再ロードまたはトリガーする方法がわかりません。ここに私のコードです
モデル(遅延ロードデータ)
class func allQuotes() -> [IndexQuotes]
{
var quotes = [IndexQuotes]()
Alamofire.request(.GET, api_indexquotes).responseJSON { response in
if response.result.isSuccess && response.result.value != nil {
for i in (response.result.value as! [AnyObject]) {
let photo = IndexQuotes(dictionary: i as! NSDictionary)
quotes.append(photo)
}
}
}
return quotes
}
とビューコントローラの一部
クラスランキング:
UIViewController,UICollectionViewDelegate,UICollectionViewDataSource {
var quotes = IndexQuotes.allQuotes()
var collectionView:UICollectionView!
override func viewDidLoad() {
これは、私は、本当に深刻な問題です私の目的を完全に満たすためにどのような技術が使用されるのか混乱させますか?
var quotes = IndexQuotes.allQuotes() {
self.update()
}
var collectionView:UICollectionView!
override func viewDidLoad() {
update()
}
private func update() {
// Update collection view or whatever.
}
実は、私は強く、この場合には、クラスの機能を使用することをお勧めしません(そして多く:あなたのUIViewControllerで
class func allQuotes(callback:() -> Void) -> [IndexQuotes]
{
var quotes = [IndexQuotes]()
Alamofire.request(.GET, api_indexquotes).responseJSON { response in
if response.result.isSuccess && response.result.value != nil {
for i in (response.result.value as! [AnyObject]) {
let photo = IndexQuotes(dictionary: i as! NSDictionary)
quotes.append(photo)
}
}
callback()
}
return quotes
}
:
さて、私はテストをしました。できます。ありがとう。私は閉鎖と完了について再調査してきました。私はこれを見つけました。http://stackoverflow.com/questions/34548180/what-is-the-best-way-to-handle-response-from-alamofire-for-a-tableview - 迅速に。私はこれがあなたのソリューションに似た方法だと思いますが、変数の前に 'lazy'キーワードを使います。なぜなのかご存知ですか? – TomSawyer
上記のトピックでは、クラスのインスタンスを作成するために遅延型変数が使用されています。ここでは、かなり異なるクラス関数を使用しています。 – vadian
@TomSawyerステートメント 'self.indexQuotes = quotes'はメインスレッドで実行されなければなりません。そうでなければスレッドセーフではありません;) – CouchDeveloper