Swift+AlamofireなTypetalkのライブラリTypetalkKitを更新して、パッケージマネジャCarthageに対応させてみました。
その他の更新内容は次の通りです。
- APIの戻り値をウェブAPIと同じにしました
- 内部コードのJSON処理部分をJSONHelperを使って書き換えました
Carthage対応
フレームワーク向けの新しいパッケージマネージャCarthageに対応しました。
といっても、TypetalkKitでは、共有スキームとしてCarthage
を用意して、セマンティックバージョンなタグを付けただけです。
CartageでTypetalkKitを利用するには、次のようなCartfile
を用意して、carthage update
します。
$ cat Cartfile github "safx/TypetalkKit" github "safx/Alamofire" $ carthage update *** Fetching Alamofire *** Fetching TypetalkKit *** Checking out Alamofire at "1.1.2" *** Checking out TypetalkKit at "0.1.2" *** xcodebuild output can be found in /var/folders/1z/nbzg_tc52hsgf_038n5_z_ch0000gn/T/carthage-xcodebuild.cR6X3v.log *** Building scheme "carthage" in Alamofire.xcworkspace *** Building scheme "Carthage" in TypetalkKit.xcworkspace
すると、Carthage.build
にAlamofire.framework
とTypetalkKit.framework
ができあがっているので、これをEmbedded BinariesにDnDで入れるだけです。
なお、サブプロジェクトにあるAlamofireは本来不要だと思うのですが、TypetalkKit.framework内のAlamofire.frameworkが不完全っぽいので別途用意しています。
さらに、Alamofire自体がCarthageに対応していないので、上記ではプロジェクトをフォークして勝手にスキームを追加させたものを使っています。
APIの戻り値の統一
ウェブAPIで返されるJSONオブジェクトと、TypetalkKitのレスポンスオブジェクトを完全に一致させました。
手書きJSONパーサを書くのが楽にしたかったので、例えば、get-topicsのトップレベル属性topics
などを意図的に省略していたりしたのですが、それをやめました。
JSONHelperのためのリライト
JSONからオブジェクトを生成するのを、JSONHelperを使うようにしました。
例えば、チームオブジェクトの生成もオペレータ<<<
を使って、次のように簡単に書けます。
public class Team : Deserializable, ObjcBase { public let id: TeamID = 0 public let name: String = "" public let imageUrl: NSURL = NSURL() public let createdAt: NSDate = NSDate() public let updatedAt: NSDate = NSDate() public required init() {} required public init(data: [String: AnyObject]) { id <<< data["id"] name <<< data["name"] imageUrl <<< data["imageUrl"] createdAt <<< (value: data["createdAt"], format: "yyyy-MM-dd'T'HH:mm:ssZ") updatedAt <<< (value: data["updatedAt"], format: "yyyy-MM-dd'T'HH:mm:ssZ") } }
以前のコードは完全に手書きで処理が怪しいところもあったので、JSONHelperを使うことでコード量も削減でき、なかなかよかったです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。