2016-12-29 9 views
0

URLからコレクションビューに画像を取得しようとしています。表示可能な画像の数はアレイの数に依存します。問題は、私は "戻りself.imageArray.count" を書くときにはnilを返しているコレクションへのURL画像

class CollectionViewController: UICollectionViewController { 


@IBOutlet weak var searchBox: UITextField! 


var imageArray:[String] = [] 


override func viewDidLoad() { 
    super.viewDidLoad() 
} 

    let link = "https://www.googleapis.com/my_link_is_here"   
    guard let url = URL(string: link) else { 

     print("Error: cannot create URL") 
     return 

    } 

    let request = URLRequest(url: url) 

    URLSession.shared.dataTask(with: request) { data, response, error in 

     guard error == nil else { 

      print("error calling GET on /todos/1") 
      print(error!) 
      return 
     } 

     do{ 

      guard let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String : Any] else { 

       print("\(error?.localizedDescription)") 
       return 
      } 

      //print("The todo is: " + json.description)             
      guard let todotitle = json["items"] as? [Any] else { 
       print("Could not get todo title from JSON") 
       return 
      } 

      let arrcnt = todotitle.count 


      var i = 0 

      while (i < arrcnt){ 

       guard let todotitle1 = todotitle[i] as? [String: Any] else { 
        print("Could not get todo title1 from JSON") 
        return 
       } 


       guard let todotitle2 = todotitle1["image"] as? [String : Any] else { 
        print("Could not get todo title2 from JSON") 
        return 
       } 

       guard let todotitle3 = todotitle2["thumbnailLink"] as? String else { 

       // continue 
       print("Could not get todo title3 from JSON") 
       return 

       } 

       self.imageArray.append(todotitle3) 

       print(self.imageArray) 

       i += 1 

      }             
     }catch{ 
      print("error trying to convert data to JSON") 
      return 
     } 

     }.resume() 

} 



/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 
*/ 

// MARK: UICollectionViewDataSource 

override func numberOfSections(in collectionView: UICollectionView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 


override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of items 
    return self.imageArray.count 
} 

は、ここに私のコードです。空の配列である配列の初期化された値をとります。最後の配列が追加された後にどのように数えられるか

+0

imageArrayの宣言を表示できますか? –

+0

クラスCollectionViewController:UICollectionViewController { @IBOutlet weak var searchBox:UITextField! のvar imageArray:[文字列] = []のviewDidLoad FUNC オーバーライド(){ super.viewDidLoad() – Gaurav

+0

それがあなたの質問を編集する代わりに、コメントにあなたのコードを追加しないでください。 –

答えて

0

whileループの後にメインスレッドのcollectionViewをリロードする必要があります。また、複数の代わりに単一のguardステートメントを作成し、whileループではなくforループを使用することで、コード全体を減らすことができるため、コード全体がこのようになります。

do{ 

    guard let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String : Any] else { 

     print("\(error?.localizedDescription)") 
     return 
    } 

    //print("The todo is: " + json.description) 
    guard let array = json["items"] as? [[String : Any]] else { 
     print("Could not get todo title from JSON") 
     return 
    } 
    for dic in array { 
     guard let imageDic = dic["image"] as? [String : Any], let thumbnailLink = imageDic["thumbnailLink"] as? String else { 
      print("Could not get thumbnailLink") 
      return 
     } 
     self.imageArray.append(thumbnailLink) 
    } 
    //Now you need to reload the collectionView on main thread. 
    DispatchQueue.main.async { 
     self.collectionView.reloadData() 
    } 
} 
+0

コレクションビューを再読み込みするだけですか? – Gaurav

+0

@ GauravKapur編集された答えを確認してください:) –

+0

それは働いています。本当にありがとうございます! – Gaurav

関連する問題