これをできる限り説明しようと思います。
私は Parse.com を使用しており、Parse データベース クラスからデータを返しています。この parse.com 呼び出しをカスタム クラスの独自の関数に入れたいと考えています。私が抱えている問題は完成です。それはどこに行くのですか?関数に追加するさまざまなバージョンを試しましたが、機能しません。
クラス名、テーブル名、およびソート記述子を受け取り、配列を返す関数を次に示します。
func queryDataInBackgroundWithBlock(parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor) -> [Any]
補完を追加するときは、次を使用します(正しくない場合があります):
func queryDataInBackgroundWithBlock(parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor, completion: (result: Any)->Void)
関数内で、Parse.com コードを使用して外に出てデータを取得します。
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Do something with the found objects
for object in objects {
self.arrayOfObjects.append(object[parseObject]!)
}
} else {
// Log details of the failure
println("Error: \(error) \(error.userInfo!)")
}
}
ここでの私の目標は、パラメーターをクラス関数に送信し、parse.com からデータを取得して、非同期呼び出しの後にデータを配列として返すことです。
私はこのようにそれを呼び出そうとしています:
myClass.queryDataInBackgroundWithBlock("databaseName", parseObject: "columnName", sortDescriptor: orderBy){
(result: Any) in
println(result)
}
ネストされた完成のようです。完了後に配列を返すにはどうすればよいですか? それを返す関数に渡されますか、それともネストされたコードで返す必要がありますか、それとも何ですか? データを取得しますが、問題は完了後に返されることです。
更新:以下のコメントで述べたように:
query.findObjectsInBackgroundWithBlock({
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Do something with the found objects
for object in objects {
self.arrayOfObjects.append(object[parseObject]!)
}
} else {
// Log details of the failure
println("Error: \(error) \(error.userInfo!)")
}
}, completion: {
//do something here
})
これはエラーを返しています:「呼び出しで余分な引数の補完」ブロックの最後に補完を追加する方法がわからないので、ブロックの周りに () を追加して補完を挿入しました。これは明らかに間違っていますが、マットが提案したようにブロックの最後に補完を追加する方法がわかりません
更新 2:
func queryDataInBackgroundWithBlock(parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor) -> [Any]{
var query = PFQuery(className:parseClass)
if sortDescriptor.key != "" {
query.orderBySortDescriptor(sortDescriptor)
}
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Do something with the found objects
for object in objects {
self.arrayOfObjects.append(object[parseObject]!!)
}
} else {
// Log details of the failure
println("Error: \(error) \(error.userInfo!)")
}
}
return self.arrayOfObjects //<-- needs to move to completion
}