2017-02-13 3 views
1

I Funktion haben, unterhalb der Kurse pro Benutzer zurückgibt:Antwort von completionHandler ist gleich Null

func CoursesPerUser(controler: UIViewController, completionHandler: @escaping (Result<[Course]>) -> Void){ 

    Alamofire.request(Constants.API.Users + UserId() + Constants.API.CoursesPerUser + Token(), encoding: JSONEncoding.default).responseJSON { response in 

     guard response.result.error == nil else { 
      print(response.result.error!) 
      completionHandler(.failure(response.result.error!)) 
      return 
     } 

     guard let json = response.result.value as? [[String: AnyObject]] else { 
      print("Didn't get course objects as JSON from API") 
      completionHandler(.failure(BackendError.objectSerialization(reason: "Did not get JSON array in response"))) 
      return 
     } 

     var courses:[Course] = [] 
     for element in json { 
      if let courseResult = Course(json: element) { 
       courses.append(courseResult) 
      } 
     } 
     completionHandler(.success(courses)) 
    } 
} 

Wenn ich rufe die Funktion Antwortwert von Null hat.

NetworkManager.sharedInstance.CoursesPerUser(controler: controler) { response in 

     print("Size of courses" + String(describing: response.value?.count)) 

} 

Ich habe jedes Element in der Funktion CoursesPerUser gedruckt und alles funktioniert gut. Ich frage mich, ob ich nicht mit der guten Manier handle.

+1

Bitte stellen Sie Ihre Lösung als die Antwort, da jemand anderes auf dieses Problem stoßen könnte, und es wird besser lesbar sein, wenn Ihre Lösung in Form einer Antwort vorliegt. – Miknash

Antwort

0

Ich habe dieses Problem gelöst. Die Lösung ist unten.

func CoursesPerUser(completionHandler: @escaping ([Course]?, NSError?) ->()){ 

    Alamofire.request(Constants.API.Users + UserId() + Constants.API.CoursesPerUser + Token(), encoding: JSONEncoding.default).responseJSON { response in 

     switch response.result { 

     case .success : 


      if let result: AnyObject = response.result.value as AnyObject? { 

       if(response.response?.statusCode == 200){ 

        var courses:[Course] = [] 

        if let array = JSON(result).array { 

         for element in array { 

          if let course = Course(json: element) { 

           courses.append(course) 

          } 

         } 
        } 

        completionHandler(courses, nil) 

       } else { 

        if let message = JSON(result)["message"].string { 

         print("Logg: " + message) 

        } 
       } 

      } 

     case .failure(let error): 

      completionHandler(nil, error as NSError?) 
     } 
    } 
} 



NetworkManager.sharedInstance.CoursesPerUser() { courses, error in 

    if(error == nil) { 

     print("Size of courses" + String(describing: courses.count)) 

    } else { 

     print("Log: " + String(describing: error)) 

    } 

} 
Verwandte Themen