MantleのXML拡張を作った
https://github.com/soranoba/MantleXMLExtension
はい. 作りました. SwiftじゃなくてObjective-Cです^^;;
Mantleって?
先人達の記事がたくさんあるので, そちらを参照してください.
Mantleを何故使うか
Json/XMLライブラリを使うのと手間はあまり変わらないでしょう.
ただ, 必須要素のチェックをvalidate
メソッドに書くことで, 異常系のハンドリングが統一的かつシンプルになるだろうということで採用しました. 1
既存のXML拡張
Mantleは標準でJsonとDictionaryしか対応していません. しかし, 残念ながら仕事で使うのはXMLでした.
Mantleも歴史のあるライブラリなので既にXML拡張はあります. MantleXMLAdapterです.
ただ, この拡張には使いたくない理由がありました.
- メンテされていない
- XMLライブラリへの依存がある (しかも普段使っているライブラリと違う)
- Model to XMLは実装しないといけない
MantleXMLExtension
という訳で作りました. MantleXMLExtension.
- XMLライブラリへの依存はありません. (NSXMLParserがあれば十分!!)
- Attribute, Arrayにも対応しています.
- Model to XMLももちろん自動です.
- XML宣言もカスタム可能
- XML to Modelの際のnodeの順番も設定可能
と, MantleXMLAdapterよりも強化しているつもりです. 何より依存がありません.
#pragma mark - MXEXmlSerializing
+ (NSDictionary<NSString*, id>* _Nonnull)xmlKeyPathsByPropertyKey
{
return @{ @"status" : MXEXmlAttribute(@"", @"status"),
@"userCount" : @"summary.count",
@"users" : MXEXmlArray(@"", MXEXmlChildNode(@"user")) };
}
+ (NSString* _Nonnull)xmlRootElementName
{
return @"response";
}
+ (NSValueTransformer* _Nonnull)usersXmlTransformer
{
return [MXEXmlAdapter xmlNodeArrayTransformerWithModelClass:UserModel.class];
}
使い方はこんな感じで, .
だけseparatorとして予約しました (Mantleに準拠).
より詳しい内容はドキュメントを参照してくださいm(_ _)m
Mantleで良いiOSライフを!
-
というよりもvalidationを書く文化がチームにありませんでした. ↩