いちいち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
使って汚いコードを押し込みましょう。