错误转换从夫特2至夫特3

问题描述:

这是第二个和最后一节我与夫特2转换为夫特3错误转换从夫特2至夫特3

对抗旧工作的代码是

func calculateSegmentDirections(index: Int, 
    time: NSTimeInterval, routes: [MKRoute]) { 

    let request: MKDirectionsRequest = MKDirectionsRequest() 
    request.source = locationArray[index].mapItem 
    request.destination = locationArray[index+1].mapItem 
    request.requestsAlternateRoutes = true 
    request.transportType = .Automobile 

    let directions = MKDirections(request: request) 
    directions.calculateDirectionsWithCompletionHandler ({ 
     (response: MKDirectionsResponse?, error: NSError?) in 
     if let routeResponse = response?.routes { 
     let quickestRouteForSegment: MKRoute = 
     routeResponse.sort({$0.expectedTravelTime < 
      $1.expectedTravelTime})[0] 

     var timeVar = time 
     var routesVar = routes 

     routesVar.append(quickestRouteForSegment) 
     timeVar += quickestRouteForSegment.expectedTravelTime 

     if index+2 < self.locationArray.count { 
      self.calculateSegmentDirections(index+1, time: timeVar, routes: routesVar) 
     } else { 
      self.showRoute(routesVar, time: timeVar) 
      self.hideActivityIndicator() 
     } 
     } else if let _ = error { 
     let alert = UIAlertController(title: nil, 
      message: "Directions not available.", preferredStyle: .Alert) 
     let okButton = UIAlertAction(title: "OK", 
      style: .Cancel) { (alert) -> Void in 
      self.navigationController?.popViewControllerAnimated(true) 
     } 
     alert.addAction(okButton) 
     self.presentViewController(alert, animated: true, 
      completion: nil) 
     } 
    }) 
} 

转换后的代码是

func calculateSegmentDirections(index: Int, 
    time: NSTimeInterval, routes: [MKRoute]) { 

    let request: MKDirectionsRequest = MKDirectionsRequest() 
    request.source = locationArray[index].mapItem 
    request.destination = locationArray[index+1].mapItem 
    request.requestsAlternateRoutes = true 
    request.transportType = .Automobile 

    let directions = MKDirections(request: request) 
    directions.calculateDirectionsWithCompletionHandler ({ 
     (response: MKDirectionsResponse?, error: NSError?) in 
     if let routeResponse = response?.routes { 
     let quickestRouteForSegment: MKRoute = 
     routeResponse.sort({$0.expectedTravelTime < 
      $1.expectedTravelTime})[0] 

     var timeVar = time 
     var routesVar = routes 

     routesVar.append(quickestRouteForSegment) 
     timeVar += quickestRouteForSegment.expectedTravelTime 

     if index+2 < self.locationArray.count { 
      self.calculateSegmentDirections(index+1, time: timeVar, routes: routesVar) 
     } else { 
      self.showRoute(routesVar, time: timeVar) 
      self.hideActivityIndicator() 
     } 
     } else if let _ = error { 
     let alert = UIAlertController(title: nil, 
      message: "Directions not available.", preferredStyle: .Alert) 
     let okButton = UIAlertAction(title: "OK", 
      style: .Cancel) { (alert) -> Void in 
      self.navigationController?.popViewControllerAnimated(true) 
     } 
     alert.addAction(okButton) 
     self.presentViewController(alert, animated: true, 
      completion: nil) 
     } 
    }) 
} 

它会引发错误就行

directions.calculateDirectionsWithCompletionHandler ({ 

错误是

无法将类型的价值 '(MKDirectionsResponse?NSError?) - >()' 到期望的参数类型 'MKDirectionsHandler'(又名 '(可选,可选) - >()')

如果有人能帮助我,我会非常感谢!

+0

这些函数太长了。在转换之前,您应该先重构它们。然后它会使它们变得更容易。 – Fogmeister

NSError在Swift 3.0中更名为Error这可能会解决您的问题。 此代码为我编译:

func calculateSegmentDirections(index: Int, 
          time: TimeInterval, routes: [MKRoute]) { 

    let request: MKDirectionsRequest = MKDirectionsRequest() 
    request.source = locationArray[index].mapItem 
    request.destination = locationArray[index+1].mapItem 
    request.requestsAlternateRoutes = true 
    request.transportType = .automobile 

    let directions = MKDirections(request: request) 
    directions.calculate (completionHandler: { 
     (response: MKDirectionsResponse?, error: Error?) in 
     if let routeResponse = response?.routes { 
      let quickestRouteForSegment: MKRoute = 
       routeResponse.sorted(by: {$0.expectedTravelTime < 
        $1.expectedTravelTime})[0] 

      var timeVar = time 
      var routesVar = routes 

      routesVar.append(quickestRouteForSegment) 
      timeVar += quickestRouteForSegment.expectedTravelTime 

      if index+2 < self.locationArray.count { 
       self.calculateSegmentDirections(index+1, time: timeVar, routes: routesVar) 
      } else { 
       self.showRoute(routesVar, time: timeVar) 
       self.hideActivityIndicator() 
      } 
     } else 
      if let _ = error { 
       let alert = UIAlertController(title: nil, 
              message: "Directions not available.", preferredStyle: .alert) 
       let okButton = UIAlertAction(title: "OK", 
            style: .Cancel) { (alert) -> Void in 
              self.navigationController?.popViewControllerAnimated(true) 
      } 
      alert.addAction(okButton) 
      self.presentViewController(alert, animated: true, 
            completion: nil) 
     } 
    }) 
} 
+0

谢谢你修复它! –