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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。