completionHandler 的响应为零
Posted
技术标签:
【中文标题】completionHandler 的响应为零【英文标题】:Response of completionHandler is nil 【发布时间】:2017-02-13 23:27:32 【问题描述】:我有下面的函数,它返回每个用户的课程:
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))
当我调用函数时,响应的值为 nil。
NetworkManager.sharedInstance.CoursesPerUser(controler: controler) response in
print("Size of courses" + String(describing: response.value?.count))
我已经打印了函数 CoursesPerUser 中的每个元素,并且一切正常。我想知道我是否没有以良好的方式处理结果。
【问题讨论】:
请将您的解决方案作为答案发布,因为其他人可能会遇到此问题,如果您的解决方案采用答案的形式,它将更具可读性。 【参考方案1】:我已经解决了这个问题。解决方法如下。
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))
【讨论】:
以上是关于completionHandler 的响应为零的主要内容,如果未能解决你的问题,请参考以下文章
在啥情况下 [NSDocument fileURL] 可以为零?
在 NSURLConnection 中的 Swift 中从 completionHandler 中获取数据