我只是在集成Siesta,我很喜欢它,它解决了我们在使用像RestKit这样的框架时遇到的许多问题。
我无法理解的是如何使用内容转换器?我看过这些文档和例子,我不太明白它是如何工作的,我也是Swift的新手。
看看这个例子,从另一个所以回答:
private let SwiftyJSONTransformer = ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
JSON($0.content as AnyObject)
}我不太明白这里发生了什么,没有返回值,所以我不明白内容是如何被转换的。这可能是我缺乏深刻的斯威夫特知识。
我已经了解了NSValueTransformer对象在Obj中是如何工作的,但是我无法解决如何将响应abit或者仅仅是一个简单的响应体(比如单个字符串、布尔值的数量或类型)映射到一个对象或类型。
我们有一些API响应,它们只返回响应体中的单个BOOL值,而大多数其他API响应是复杂的JSON对象图。
我将如何将这些响应映射到更原始的类型和或更复杂的对象。
谢谢。
发布于 2016-03-18 16:54:08
你的一些困惑是基本的迅速的东西。在闭包使用$0且只包含一条语句的情况下,将推断输入类型,并且return是隐式的。因此,您问题中的代码相当于:
ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
(content: AnyObject, entity: Entity) in
return JSON(content)
}(使用$0.content而不仅仅是$0是Swift中的一个可能bug--也许--特性的解决方案,$0成为所有参数的元组,而不仅仅是第一个参数。不要太担心;$0.content只是一个神奇的咒语,你可以在你的Siesta变压器中使用。)
你的另一半困惑是西斯塔本身。一般做法如下:
NSData转换为已解码但非结构化的类型,如String或Dictionary。useDefaultTransformers: false。
对于仅仅是一个普通布尔值的响应,您可能只执行#1 --具体取决于服务器发送的响应类型,以及取决于您如何知道它只是一个布尔值。
我推荐大家看看示例项目,它提供了一个很好的例子来说明这一切是如何进行的。您将在该代码中看到根据内容类型有条件地操作的变压器(#1)和模型专用变压器(#2)的示例。
https://stackoverflow.com/questions/36088096
复制相似问题