2015-06-18 9 views
20

Ich versuche, die Anzahl der Ergebnisse einer Abfrage in einer ganzen Zahl zu speichern, damit ich sie verwenden kann, um die Anzahl der Zeilen in einer Tabelle zu bestimmen. Ich erhalte jedoch den folgenden Fehler: Variable 'numberOfGames' captured by a closure before being initialized' auf der Leitung query.findObjectsInBackgroundWithBlock{.Variable, die durch Schließen erfasst wird, bevor sie initialisiert wird

Ich bekomme auch einen anderen Fehler Variable 'numberOfGames' used before being initialized auf der Linie return numberOfGames.

Hier ist die Funktion, die die zwei Fehler enthält:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     var user: PFUser! 

     var numberOfGames: Int 

     //...query code....removed to make it easier to read 

     var query = PFQuery.orQueryWithSubqueries([userQuery, userQuery2, currentUserQuery, currentUserQuery2]) 
     query.findObjectsInBackgroundWithBlock{ 
      (results: [AnyObject]?, error: NSError?) -> Void in 

      if error != nil { 
       println(error) 
      } 

      if error == nil{ 

       if results != nil{ 
        println(results) 
        numberOfGames = results!.count as Int 
       } 
      } 
     } 
     return numberOfGames 
    } 

Antwort

23

Sie müssen, bevor Sie die Variable initialisiert werden sie in einem Verschluss verwenden:

As per apple documentation

If you use a closure to initialize a property, remember that the rest of the instance has not yet been initialized at the point that the closure is executed. This means that you cannot access any other property values from within your closure, even if those properties have default values. You also cannot use the implicit self property, or call any of the instance’s methods.

Der Befehl var numberOfGames: Int nur erklären es initialisieren können Sie var numberOfGames = Int() oder var numberOfGames:Int = 0

012 verwenden
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     var user: PFUser! 
     var numberOfGames:Int = 0 
     var query = PFQuery.orQueryWithSubqueries([userQuery, userQuery2, currentUserQuery, currentUserQuery2]) 
     query.findObjectsInBackgroundWithBlock{ 
      (results: [AnyObject]?, error: NSError?) -> Void in 
      if error != nil { 
       println(error) 
      } 
      if error == nil{ 
       if results != nil{ 
        println(results) 
        numberOfGames = results!.count as Int 
       } 
      } 
     } 
     return numberOfGames 
    } 
+0

* facepalm ... Ich muss den Unterschied zwischen deklarieren und initialisieren lernen. Danke für die Hilfe! – winston

Verwandte Themen