Swiftでは#mapがあります。
というわけでParseで受け取ったオブジェクトを#mapしたくなりますね。
Swiftの神キャストに期待して安直に書くと…
someParse.swift
var messages : Message[]!
let query = PFQuery(className: "Message")
query.whereKey("user", equalTo: PFUser.currentUser())
query.findObjectsInBackgroundWithBlock {(objects : AnyObject[]!, error: NSError!) in
messages = objects.map {(message: PFObject!) in Message(text: message["text"], sender: message["sender"], ...)}
}
こんな感じに出来そうに見えますが出来ません。
まず、message: PFObject
で型不一致で引っ掛かり、o["text"]
がAnyObject で返ってくるので Message の init でも型不一致で死にます。
というわけで、こんな感じに明示的なキャストを駆使することでParseで#mapをキメることが出来ます。
someParse.swift
var messages : Message[]!
let query = PFQuery(className: "Message")
query.whereKey("user", equalTo: PFUser.currentUser())
query.findObjectsInBackgroundWithBlock {(objects : AnyObject[]!, error: NSError!) in
messages = (objects as PFObject[]).map {(message: PFObject) in Message(text: message["text"] as String, sender: message["sender"] as String, ...)}
}
関係ないですが静的言語を書くのに疲れたので、RubyMotionをキメたくなってきました。