I am trying to load images from server into my iOS app with the help of GET request. However, it reports the error:
ambiguous reference to member 'jsonObject(with:options:)
Can anyone please help resolve the error?
import UIKit
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet var MyCollectionView: UICollectionView!
var images : [String] = []
override func viewDidLoad() {
super.viewDidLoad()
loadImages()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
//MyCollectionViewCell
let myCell:MyCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyCollectionViewCell
DispatchQueue.global(qos: .background).async{
let imageString = self.images[indexPath.row]
let imageUrl = NSURL(string: imageString)
let imageData = NSData(contentsOf: imageUrl! as URL)
DispatchQueue.main.async {
//if(imageData! = nil)
//{
myCell.myImageView.image = UIImage(data: imageData! as Data)
//}//end of if
}//end of DispatchQueue.main.async
};//end of main dispatch
return myCell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("User tapped on image # \(indexPath.row)")
}
func loadImages()
{
let startTime = NSDate.timeIntervalSinceReferenceDate
var pageUrl = "Url is here"
let myUrl = NSURL(string: pageUrl)
let request = NSMutableURLRequest(url:myUrl! as URL)
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in
//If error displays any alert message
if error != nil {
var myAlert = UIAlertController(title: "Alert", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)
myAlert.addAction(okAction)
self.present(myAlert, animated: true, completion: nil)
return
}
var err: NSError?
if let usabledata = data{
do{
var jsonArray = try JSONSerialization.jsonObject(with: usabledata, options: .mutableContainers) as! [String:AnyObject]
print(jsonArray)
//conditional binding error here
if let parseJSONArray = jsonArray {
self.images = parseJSONArray as! [String]
DispatchQueue.main.async(execute: {
self.MyCollectionView.reloadData()
})//end of dispatchQueue
}//end of if
}catch{
print(error)
}
}
}
task.resume()
}
}
Try this :
Replace with your code
if let usableData = data {
do {
var jsonArray = try JSONSerialization.jsonObject(with: usableData, options: .mutableContainers) as! [String:AnyObject]
if let parseJSONArray = jsonArray as? [String] {
// parse array here
}
} catch {
print("JSON Processing Failed")
}
}