いちいちfindObjects...とか打つの面倒だしViewControllerが汚くなるのでラッピングしましょう。
それに、(objects as PFObject[]!).map {...}が美しくないです。
Message.swift
class Message {
class func findAllByUserWithBlock (user: PFObject!, callback: (PFObject[]!)->()) {
let query = PFQuery(className: "Message")
query.whereKey("user", equalTo: user)
query.findObjectsInBackgroundWithBlock {(objects : AnyObject[]!, error: NSError!) in
if (objects.count > 0) {
callback(objects as PFObject[]!)
}
}
}
}
HogeViewController.swift
let user = PFUser.currentUser()
Message.findAllByUserWithBlock(user) {(messages: PFObject[]!) in
self.messages = messages.map {(message: PFObject!) in JSQMessage(text: message["text"] as String, sender: message["sender"] as String, date: message.createdAt)}
}
まあまあ心が洗われる文法になりました。
PFObjectもラッピングしてあげればas Stringも[""]も不要になりますね。
面倒くさいです。
ちなみにブロックはrubyのごとく()の外に出して呼ぶことが出来ます。
jQueryでよく見るような})を沢山見なくてすみますね。
PFUserも悲しい書き方がたくさん出来てしまうので、extension使って汚いコードを押し込みましょう。