2016-10-09 3 views
0

Dieses Segment von Code funktionierte perfekt in Swift 2Wie benutze ich BFTask mit 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; 
     }) 

    } 
} 

Jetzt in Swift 3 I auf der Leitung einen Fehler

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

, der sagt: nicht Wert vom Typ konvertieren kann ‚(BFTask < _> !) -> BFTask! ' zum erwarteten Argumenttyp '(BFTask?) -> Any ?!'

Dies verwendet AWS, um ein Element in DynamoDB zu speichern.

+0

Haben Sie Ihre Installation für Swift 3 aktualisiert? https://github.com/BoltsFramework/Bolts-Swift – Adrian

Antwort

0

Ändern der Rückgabetyp Any? statt BFTask? wie diese,

//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; 
    }) 

Thanks :)

0

(aktualisiert Swift 3.1 Syntax)

Ihre self.dataStash Aufgabe gibt einen Typ für generische BFTask in Winkelstreben. Nehmen wir an, dass Ihre self.dataStash vom Typ:

var dataStash : BFTask<MyObject>! 

dann müssen Sie Ihren Code auf dataStash Aufgabenerledigung aufgerufen ändern: Sie BFTask Rückgabetyp

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

vor allem in Ihrer gekettet Aufgabe angeben:

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

Beachten Sie, dass MyObject und MyDifferentObject müssenanzupassenProtokoll.