[swift]提示为强类型化的 xml 属性组成 (生成器) 的

标签: XML Swift
发布时间: 2017/3/6 22:58:07
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我正在进行符合特定属性限制在它的元素的 xml 生成器。例如,此人元素只有有效的属性将"性别"和值只能是"男"或"女"。

现在,我使用 [String:String] 属性键/值对。我想强类型的方式,迫使这些限制每个每个唯一的元素属性要求。

我不知所措, Swift 做这件事的方式。任何的想法,将不胜感谢。谢谢你 !

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()

解决方法 1:

而不是类型安全的 XML 生成器你应该可能会考虑对你对象模型以类型安全的方式,构建,然后呈现本身成 XML,内部或外部。

所以你可以有︰

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

然后,可以创建他们在类型安全的方式︰

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

然后走过去要生成一个 XML 元素的元素或添加一个 toXML 方法,返回一个字符串,包含元素。如果您的所有数据结构从都继承的允许他们要转换的Protocol,您可以将这集成到生成器。但你将不得不使用临时类型安全数据结构使您可以做到这一点而不是泛型字典。

赞助商