1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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ライフを!


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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?