2016-09-21 2 views
1

これは、変換されたコードがエラーが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) 
     } 
    }) 
} 

だった私はスウィフト3

にスウィフト2を変換して戦っています秒と最後のセクションであります

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

答えて

3

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

それを修正していただきありがとうございます! –