2017-01-05 5 views
-1

私はクロージャー関数が呼び出されているときに問題があります。closureを実行して適切に実行する方法

private var formatedArticles = [article]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let unformatedData = JsonDataFetcher() 

    unformatedData.getFromJSON() { articles in 
     self.formatedArticles = unformatedData.addArticles(array: articles) 
     print(self.formatedArticles[0]) 
    } 
    print(self.formatedArticles[0]) 
} 

これは基本的に、私のクロージャー内のコードがまだ実行されていないため、最後のprintステートメントでアプリケーションがクラッシュします。そのプリントが削除されると、クロージャ内のプリントが実行されます。...望むときにクロージャを実行するにはどうすればよいですか?なぜなら問題は今では私の書式化されたアーティクル配列を他のものに使用したいのですが、インデックスを境界から外しています。

+0

あなたはしません。あなたは、それが何であれ、次のステップを実行します。 – matt

答えて

0

これは非同期コードの仕組みではありません。次のステップはの中に入れなければならない。クロージャー。したがって、このように:

unformatedData.getFromJSON() { articles in 
    self.formatedArticles = unformatedData.addArticles(array: articles) 
    print(self.formatedArticles[0]) 
    // use self.formatedArticles _here_ 
} 
// do _nothing_ here 
関連する問題