self.enums = try parser.fetch("enums") { (array: [String]) in array.flatMap(SomeEnum(rawValue: $0)) }
由于这行显得有些粗糙,让我们在 Parser 中创建一个新的方法来专门处理数组:
fetched.flatMap(transformation) }
这里使用 flatMap 来帮助我们移除空值,减少了代码量:
self.enums = try parser.fetchArray("enums") { SomeEnum(rawValue: $0) }
末尾的这个闭包应该被作用于 每个 元素,而不是整个数组(你也可以修改 fetchArray 方法,以在任意值无法被构建时抛出错误。)
我很喜欢泛型模式。它很简单,可读性强,而且也没有复杂的依赖(这只是个 50 行的 Parser 类型)。它使用了 Swift 风格的结构, 还会给你非常特定的错误提示,告诉你 为何 解析失败了,当你在从服务器返回的 JSON 沼泽中摸爬滚打时,这显得非常有用。最后,用这种方法解析的另外一个好处是,它在结构体和类上都能很好地工作,这使得从引用类型切换到值类型,或者反之,都变得很简单。
这里 是包含所有代码的一个 gist,而 这里 是一个作为补充的 Playground.