mehrdeutige Referenz auf member 'jsonObject(mit:Optionen:)

Ich versuche, das laden von Bildern vom server in meiner ios-app mit Hilfe der GET-Anfrage. Aber es zeigt eine gewisse Vieldeutigkeit. Kann bitte jemand helfen. Hier ist der code unten`
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()

}

}

  • Ausgewählte Antwort
    pkamb
    4. Mai 2019

    Versuchen Sie, diese :

    Ersetzen Sie mit Ihrem 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")
         }
     }