我试图将查询结果的数量存储到整数中,以便我可以使用它来确定表中的行数。但是,我在第Variable 'numberOfGames' captured by a closure before being initialized'
行上收到以下错误:query.findObjectsInBackgroundWithBlock{
。
我还在Variable 'numberOfGames' used before being initialized
行上收到了另一个错误return numberOfGames
。
这里包含两个错误的函数:
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
}
答案 0 :(得分:31)
您需要在变量中使用它之前初始化变量:
如果使用闭包初始化属性,请记住其余部分 该实例尚未初始化 关闭执行。这意味着您无法访问任何其他 封闭内的属性值,即使这些属性也是如此 有默认值。你也不能使用隐式自我属性, 或者调用任何实例的方法。
命令var numberOfGames: Int
只是声明要初始化,您可以使用var numberOfGames = Int()
或var numberOfGames:Int = 0
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
}