Skip to content

Instantly share code, notes, and snippets.

@apple-avadhesh
Last active November 24, 2021 10:18
Show Gist options
  • Save apple-avadhesh/501874de33954e7bb5efada4a7116933 to your computer and use it in GitHub Desktop.
Save apple-avadhesh/501874de33954e7bb5efada4a7116933 to your computer and use it in GitHub Desktop.
Test JSON
struct BaseModel : Codable {
let photos : Photos?
let stat : String?
enum CodingKeys: String, CodingKey {
case photos = "photos"
case stat = "stat"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
photos = try values.decodeIfPresent(Photos.self, forKey: .photos)
stat = try values.decodeIfPresent(String.self, forKey: .stat)
}
}
struct Photo : Codable {
let id : String?
let owner : String?
let secret : String?
let server : String?
let farm : Int?
let title : String?
let ispublic : Int?
let isfriend : Int?
let isfamily : Int?
let url_s : String?
let height_s : Int?
let width_s : Int?
enum CodingKeys: String, CodingKey {
case id = "id"
case owner = "owner"
case secret = "secret"
case server = "server"
case farm = "farm"
case title = "title"
case ispublic = "ispublic"
case isfriend = "isfriend"
case isfamily = "isfamily"
case url_s = "url_s"
case height_s = "height_s"
case width_s = "width_s"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
id = try values.decodeIfPresent(String.self, forKey: .id)
owner = try values.decodeIfPresent(String.self, forKey: .owner)
secret = try values.decodeIfPresent(String.self, forKey: .secret)
server = try values.decodeIfPresent(String.self, forKey: .server)
farm = try values.decodeIfPresent(Int.self, forKey: .farm)
title = try values.decodeIfPresent(String.self, forKey: .title)
ispublic = try values.decodeIfPresent(Int.self, forKey: .ispublic)
isfriend = try values.decodeIfPresent(Int.self, forKey: .isfriend)
isfamily = try values.decodeIfPresent(Int.self, forKey: .isfamily)
url_s = try values.decodeIfPresent(String.self, forKey: .url_s)
height_s = try values.decodeIfPresent(Int.self, forKey: .height_s)
width_s = try values.decodeIfPresent(Int.self, forKey: .width_s)
}
}
struct Photos : Codable {
let page : Int?
let pages : Int?
let perpage : Int?
let total : Int?
let photo : [Photo]?
enum CodingKeys: String, CodingKey {
case page = "page"
case pages = "pages"
case perpage = "perpage"
case total = "total"
case photo = "photo"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
page = try values.decodeIfPresent(Int.self, forKey: .page)
pages = try values.decodeIfPresent(Int.self, forKey: .pages)
perpage = try values.decodeIfPresent(Int.self, forKey: .perpage)
total = try values.decodeIfPresent(Int.self, forKey: .total)
photo = try values.decodeIfPresent([Photo].self, forKey: .photo)
}
}
func callAPI() {
if let url = URL(string: "https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&extras=url_s&api_key=aabca25d8cd75f676d3a74a72dcebf21&format=json&nojsoncallback=1") {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
do {
let res = try JSONDecoder().decode(BaseModel.self, from: data)
print(res.photos?.photo)
} catch let error {
print(error)
}
}
}.resume()
}
}
callAPI()
@codeRidersX
Copy link

codeRidersX commented Nov 23, 2021

Can u tell me what am i doing wrong?, like i said im trying to put the API response that gives me array, into a UICollectionView.

`
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

var images = [AnyObject]()
var myCollectionView:UICollectionView?


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
        layout.itemSize = CGSize(width: 60, height: 60)
        
        myCollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
        myCollectionView!.dataSource = self
        myCollectionView!.delegate = self
        myCollectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell")
        myCollectionView!.backgroundColor = UIColor.white
        self.view.addSubview(myCollectionView!)
        
        callAPI()
    }
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.images.count
    }
    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath as IndexPath)
        myCell.backgroundColor = UIColor.black
        
        let imageDictionary = self.images[indexPath.row] as! NSDictionary
        let imageUrlString = imageDictionary.object(forKey: "thumb") as! String
        let imageUrl:NSURL = NSURL(string: imageUrlString)!
        
        DispatchQueue.global(qos: .userInitiated).async {
            
            let imageData:NSData = NSData(contentsOf: imageUrl as URL)!
            let imageView = UIImageView(frame: CGRect(x:0, y:0, width:myCell.frame.size.width, height:myCell.frame.size.height))
            
            DispatchQueue.main.async {
                
                let image = UIImage(data: imageData as Data)
                imageView.image = image
                imageView.contentMode = UIView.ContentMode.scaleAspectFit
                
                myCell.addSubview(imageView)
            }
        }
        
        return myCell
    }
    
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
    {
        print("User tapped on item \(indexPath.row)")
        
        let imageDictionary = self.images[indexPath.row] as! NSDictionary
        let imageUrlString = imageDictionary.object(forKey: "thumb") as! String
        
        print("Image url = \(imageUrlString)")
    }
    
    
func callAPI() {
    if let url = URL(string: "https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&extras=url_s&api_key=aabca25d8cd75f676d3a74a72dcebf21&format=json&nojsoncallback=1") {
       URLSession.shared.dataTask(with: url) { data, response, error in
          if let data = data {
              do {
                 let res = try JSONDecoder().decode(ManagerForPhoto.self, from: data)
                  print(res.photos?.photo)
              } catch let error {
                 print(error)
              }
           }
       }.resume()
    }
}
           
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
`

@apple-avadhesh
Copy link
Author

share the repo link, if you want me to check it.

@codeRidersX
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment