Help us understand the problem. What is going on with this article?

MantleのXML拡張を作った

More than 3 years have passed since last update.

MantleのXML拡張を作った

https://github.com/soranoba/MantleXMLExtension
はい. 作りました. SwiftじゃなくてObjective-Cです^^;;

Mantleって?

https://github.com/Mantle/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ライフを!



  1. というよりもvalidationを書く文化がチームにありませんでした. 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away