2016-07-09 7 views
1

私はここで問題を扱っています。私はParseのテーブル上で(関数内で)クエリを作成しています。いくつかのオブジェクトIDを取得します。私はそれらを配列にプッシュします。 viewDidLoadでスウィフト2関数の完了

iは以下の順序

override func viewDidLoad() { 
     super.viewDidLoad() 

    refreshControl = UIRefreshControl() 
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") 
    refreshControl.addTarget(self, action: #selector(Images.refresh), forControlEvents: UIControlEvents.ValueChanged) 
    self.imagesCollView!.addSubview(refreshControl) 
    queryLikes() // it calls first the likes query 
    queryImages("") // and when the previous query has done, it should run this query. 
} 

と画像のオブジェクトIDがたObjectIdのアレイ内に含まれている場合cellForItemAtIndexPathでIチェックだし、次いでからボタンの背景を変更を持っています好きになるとは思っていません。 今までは良いのすべてが、私はまた、その

@IBAction func refreshButt(sender: AnyObject) { 
    queryLikes() //this first call to the query of likes table 
    searchBar.text = "" 
    categoryStr = "" 
    queryImages("") //and when the previous query is ready, it should run this query. 
} 

誰かがボタンで表示を更新するときだから、時にはそれが最初の最初と2番目のクエリをロードするようなものであるリフレッシュ機能を持っています。

queryLikesを最初に実行する方法と、完了するとqueryImagesを実行する方法を示す実例がありますか?

ありがとうございます!

答えて

3

あなたはコールバックを使用して、要求をチェーン化することによって、これを達成することができます:

enum Result<T> { 
    case Success(T) 
    case Failure(NSError) 
} 


func queryLikes(completion: Result<Void> -> Void) { 
    if networkCallSuccess() { completion(.Success()) } 
    else { completion(.Failure(.Error)) } 
} 

queryLikes() { result in 
    switch result { 
    case .Success: queryImages() 
    case .Failure(let error): // Handle error 
    } 

} 
+0

私は '完了(.Success())'それは私にエラーを与える私の 'queryLikes'成功'内の非機能型の値を呼び出すことはできません挿入しよう(別名「結果<()>」「を結果」 ) '私は' enum'を輸入の直下に置いています。何か不足していますか?質問を完全な機能で更新したいのですか? –

+1

ここで私は開始方法で何が完了したかを完全に理解しています。多くのありがとうDiogo !!魅力のように働いた:D –

2

これは状況に対処するためにはるかに簡単な方法です。しかし、私はこのアプローチではなくDiogo Antunesの答えをお勧めします。あなたが初心者の場合は、これと一緒に行くことができます。

func queryLikes(completion: (success : Bool) ->()) { 
    // After putting your statements 
    completion(success: true) 
} 

関数内の条件を処理する場合は、これを試してください。

func queryLikes(completion: (success : Bool) ->()) { 

      if condition { 
       completion(success: true) 
      } 
      else { 
       completion(success: false) 
      } 
     } 

関数内のforループを使用します。

func queryLikes(completion: (success : Bool) ->()) { 

      let objects : [Int] = [] 

      for object in 0..<objects.count 
      { 
       if object == objects.endIndex 
       { 
        completion(success: true) 
       } 
      } 
     } 
+1

両方の答えが正しいと両方が働いた!しかし、私は彼が最初に答えたので、ジオゴの答えを受け入れた。あなたの助けをありがとう:D –

+1

@KwnstantinosNatsios問題はありません、彼の答えが好ましい方法です。 –

関連する問題