2016-10-09 2 views
0

Этот сегмент кода прекрасно работал в Swift 2Как использовать BFTask с Swift 3?

override func prepare(for segue: UIStoryboardSegue?, sender: Any?) { 
    if (segue!.identifier == "FeedDetailSeg") { 
     let viewController:ItemDetail = segue!.destination as! ItemDetail 

     viewController.DetailItem = collectionItems![self.selectedRow] 

     if self.cognitoID == collectionItems![self.selectedRow].seller { 
      viewController.owned = true 
     } 
     else { 
      viewController.owned = false 
     } 

     //remove item from untapped 
     //appDelegate.untapped.removeAtIndex(self.selectedRow) 

     //collect view info 
     self.dataStash(collectionItems![self.selectedRow].ID, itemCondition: 2).continueWithBlock({ 
      (task: BFTask!) -> BFTask! in 

      if (task.error != nil) { 
       print(task.error!.description) 
      } else { 
       print("DynamoDB save succeeded") 
      } 

      return nil; 
     }) 

    } 
} 

Сейчас в Swift 3 я получаю ошибку на линии

//collect view info  
self.dataStash(collectionItems![self.selectedRow].ID, itemCondition: 2).continueWithBlock({ 

, который говорит: Невозможно преобразовать значение типа «(BFTask < _> !) -> BFTask! ' до ожидаемого типа аргумента '(BFTask?) -> Any ?!

Это использование AWS для сохранения предмета в DynamoDB.

+0

Вы обновили свою установку для Swift 3? https://github.com/BoltsFramework/Bolts-Swift – Adrian

ответ

0

Изменить тип возврата к Any? вместо BFTask?, как это,

//collect view info 
    self.dataStash(collectionItems![self.selectedRow].ID, itemCondition: 2).continueWithBlock({ 
     (task: BFTask!) -> Any! in 

     if (task.error != nil) { 
      print(task.error!.description) 
     } else { 
      print("DynamoDB save succeeded") 
     } 

     return nil; 
    }) 

Спасибо :)

0

(обновлена ​​Swift 3.1 синтаксис)

Ваша self.dataStash задача определяет тип для общий BFTask в угловых скобках. Давайте предположим, что ваш self.dataStash имеет тип:

var dataStash : BFTask<MyObject>! 

, то вы должны изменить ваш код призвал dataStash выполнения задачи по:

self.dataStash(collectionItems![self.selectedRow].ID, itemCondition: 2).continue({ (task: BFTask<MyObject>!) -> Any? in 

особенно в вашей прикован задаче, которую вы можете указать BFTask тип возвращаемого:

continue({ (task: BFTask<MyObject>!) -> BFTask<MyDifferentObject>? in 

Обратите внимание, что MyObject и MyDifferentObject должны соответствовать AnyObject протокол.

Смежные вопросы