2016-06-21 6 views
0

私はその要素の特定の属性の制限に適合するxmlビルダーの開発を進めています。たとえば、このPerson要素の唯一の有効な属性は "gender"で、値は "male"または "female"です。強力な型付けされたxml属性の構成(ビルダー)のヒント

今、私は[String:String]を属性キー/値に使用しています。私は、それぞれの固有の要素属性の要件ごとにこれらの制限を強制する強く型付けされた方法を希望します。

私はこれをすばやく行うために迷っています。どんなアイデアでも大歓迎です。ありがとう!

extension XmlBuilder { 
    func person(text: String? = "", attributes: [String:String] = [String:String]()) -> XmlBuilder { 
     fn = compose(fn, { doc in 
      doc.root.addChild(name: "Person", value: text, attributes: attributes) 
      return doc 
     }) 
     return self 
    } 
} 

let xml = XmlBuilder() 
    .person("Jon", attributes: ["gender":"male"]) 
    .construct() 
+0

「特定の属性に準拠している」と言ったら、どういう意味ですか? XMLスキーマの使用を意味しますか、それとも別の意味ですか?すべてのXML属性は文字列であることに注意してください。異なるタイプに/から変換したい場合は、いつでも変換を使用する必要があります。 – AlBlue

+0

もっと分かりやすく、ありがとうございます。 – DarthVadar123451

答えて

0

よりもむしろタイプセーフXMLビルダを持つ、あなたはおそらく、タイプセーフな方法であなたのオブジェクトモデルを構築する考え、そしてそれは内部または外部XMLに自分自身をレンダリングする必要があります。

あなたが持っている可能性がありそう:XML要素を生成、またはtoXMLメソッドを追加する要素の上を歩く、その後

Person(name:"alblue", gender: .Male) 

そして:

enum Gender { case Male, Female } 
struct Person { let name:String; let gender:Gender } 

をあなたはその後、タイプセーフな方法でそれらを作成することができます要素を含むStringを返します。すべてのデータ構造が継承してプロトコルを変換することができるプロトコルがあれば、これをビルダーに統合することができます。しかし、一般的な辞書の代わりにこれを行うことを可能にする暫定型の安全なデータ構造を使用する必要があります。

+0

それは私がすることです。ありがとう – DarthVadar123451

+0

私はこの[link](http://alisoftware.github.io/swift/enum/json/2015/07/16/swift-enums-for-JSON-parsing/)を見つけました。これはAlBlueの提案に関連していますが、 JSON。 – DarthVadar123451

関連する問題