Swift3关闭崩溃

问题描述:

,而与完成处理Swift3关闭崩溃

func sessionTaskPostRequest (_ urlRequest : URLRequest , responseHandler: @escaping ResponseHandler) -> URLSessionTask { 
    // 5 
    let sesstionTask : URLSessionTask = networkSession.dataTask(with: urlRequest, completionHandler: { (data : Data? , urlResponse : URLResponse? , error : NSError?)  in 

     var json: NSDictionary! 
     do { 
      json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions()) as? NSDictionary 
     } catch { 
      print(error) 
     } 

     // Did the JSONObjectWithData constructor return an error? If so, log the error to the console 
     if(error != nil) { 
      responseHandler (false , nil , error , nil) 
     } 
     else { 
      // The JSONObjectWithData constructor didn't return an error. But, we should still 
      // check and make sure that json has a value using optional binding. 
      if let parseJSON = json { 
       let errorJSON = parseJSON ["Err"] as! String 
       if !errorJSON.isEmpty { 
        responseHandler (false , nil , nil , errorJSON) 
       }else { 
        responseHandler (true , parseJSON , nil , nil) 
       } 
       print("Succes: \(parseJSON)") 
      } 
      else { 
       // Woa, okay the json object was nil, something went worng. Maybe the server isn't running? 
       let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
       responseHandler (false , nil , error , "Error could not parse JSON") 
       print("Error could not parse JSON: \(jsonStr)") 
      } 
     } 
    } as! (Data?, URLResponse?, Error?) -> Void) 

    return sesstionTask 

} 

,创造了一个返回响应JSON对象响应处理一个类型别名创建URLSessionTask的实例崩溃。类型别名如下

typealias ResponseHandler = (_ successFlag :Bool , _ data : NSDictionary? , _ errorObject : NSError? , _ errorString : String?) -> Void 
+0

你在哪一行崩溃 – Avt

+0

} as! (Data?,URLResponse ?,错误?) - > Void) –

好像响应处理越来越Error对象为NSError将得到坠毁,如果错误的对象是零,未能将它转换为NSError

错误=零 ,当你收到它作为NSError类型转换失败,因为nil对象,但同样的事情明智地处理,如果你不做任何类型转换