クエリからの結果の数を整数に格納しようとしています。これを使用して、テーブル内の行の数を決定できます。ただし、次のエラーが表示されます:Variable 'numberOfGames' captured by a closure before being initialized'
行のquery.findObjectsInBackgroundWithBlock{
。
また、別のエラーVariable 'numberOfGames' used before being initialized
行のreturn numberOfGames
。
2つのエラーを含む関数は次のとおりです。
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
}
クロージャー内で使用する前に変数を初期化する必要があります。
クロージャーを使用してプロパティを初期化する場合、クロージャーが実行される時点でインスタンスの残りの部分はまだ初期化されていないことに注意してください。これは、プロパティにデフォルト値が設定されていても、クロージャ内から他のプロパティ値にアクセスできないことを意味します。また、暗黙のselfプロパティを使用したり、インスタンスのメソッドを呼び出したりすることもできません。
コマンド_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
}
_