如何在 Siesta 中定义内容转换器?
How to define content transformers in Siesta?
我正在集成 Siesta,我喜欢它,它解决了我们在使用 RestKit 等框架时遇到的很多问题。
我无法理解的是如何使用内容转换器?我查看了文档和示例,但我不太明白它是如何工作的,我对 Swift.
也很陌生
看这个例子取自另一个 SO 回复:
private let SwiftyJSONTransformer = ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
JSON([=10=].content as AnyObject)
}
我不太明白这里发生了什么,没有 return 值,所以我不明白内容是如何转换的。这可能是我缺乏深入的 Swift 知识所致。
我了解 NSValueTransformer
对象在 Obj-C 中的工作方式,但我不知道如何映射响应 abit JSON 或只是一个简单的响应主体,如单个字符串,使用 Siesta 的对象或类型的布尔值数量。
我们有一些 API 响应 return 只是响应主体中的单个 BOOL 值,而大多数其他 API 响应是复杂的 JSON 对象图。
我将如何将这些响应映射到更原始的类型和/或更复杂的对象。
谢谢。
您的一些困惑是基本的 Swift 内容。在闭包使用 [=11=]
且仅包含单个语句的情况下,将推断输入类型并且 return
是隐式的。因此,您问题中的代码等效于:
ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
(content: AnyObject, entity: Entity) in
return JSON(content)
}
(使用 [=13=].content
而不是 [=11=]
是 Swift 中可能存在错误的功能的解决方法,其中 [=11=]
成为所有参数的元组而不仅仅是第一个。不要太担心它;[=13=].content
只是您可以在午睡变形金刚中使用的魔法咒语。)
你困惑的另一半是午睡本身。一般做法如下:
- 配置一个通用转换器,将原始
NSData
转换为解码但未结构化的类型,例如 String
或 Dictionary
。
- 您通常会根据内容类型进行配置。
- Siesta 包括对字符串、JSON 和图像的解析,除非您 turn it off with
useDefaultTransformers: false
。
- 可选择配置第二个转换器,将非结构化类型转换为模型。
- 您通常会根据 API 路径进行配置。
- Siesta 默认不包含任何这些;都是每个应用程序。
对于纯布尔值的响应,您可能只会执行 #1 — 具体取决于服务器发送的响应类型,以及您如何知道它只是一个布尔值。
我建议查看该代码中的 example project included with Siesta, which gives a good example of how all this plays out. You’ll see examples of both transformers that conditionally operate on the content based on its type (#1) and model-specific tranformers (#2)。
我正在集成 Siesta,我喜欢它,它解决了我们在使用 RestKit 等框架时遇到的很多问题。
我无法理解的是如何使用内容转换器?我查看了文档和示例,但我不太明白它是如何工作的,我对 Swift.
也很陌生看这个例子取自另一个 SO 回复:
private let SwiftyJSONTransformer = ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
JSON([=10=].content as AnyObject)
}
我不太明白这里发生了什么,没有 return 值,所以我不明白内容是如何转换的。这可能是我缺乏深入的 Swift 知识所致。
我了解 NSValueTransformer
对象在 Obj-C 中的工作方式,但我不知道如何映射响应 abit JSON 或只是一个简单的响应主体,如单个字符串,使用 Siesta 的对象或类型的布尔值数量。
我们有一些 API 响应 return 只是响应主体中的单个 BOOL 值,而大多数其他 API 响应是复杂的 JSON 对象图。
我将如何将这些响应映射到更原始的类型和/或更复杂的对象。
谢谢。
您的一些困惑是基本的 Swift 内容。在闭包使用 [=11=]
且仅包含单个语句的情况下,将推断输入类型并且 return
是隐式的。因此,您问题中的代码等效于:
ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
(content: AnyObject, entity: Entity) in
return JSON(content)
}
(使用 [=13=].content
而不是 [=11=]
是 Swift 中可能存在错误的功能的解决方法,其中 [=11=]
成为所有参数的元组而不仅仅是第一个。不要太担心它;[=13=].content
只是您可以在午睡变形金刚中使用的魔法咒语。)
你困惑的另一半是午睡本身。一般做法如下:
- 配置一个通用转换器,将原始
NSData
转换为解码但未结构化的类型,例如String
或Dictionary
。- 您通常会根据内容类型进行配置。
- Siesta 包括对字符串、JSON 和图像的解析,除非您 turn it off with
useDefaultTransformers: false
。
- 可选择配置第二个转换器,将非结构化类型转换为模型。
- 您通常会根据 API 路径进行配置。
- Siesta 默认不包含任何这些;都是每个应用程序。
对于纯布尔值的响应,您可能只会执行 #1 — 具体取决于服务器发送的响应类型,以及您如何知道它只是一个布尔值。
我建议查看该代码中的 example project included with Siesta, which gives a good example of how all this plays out. You’ll see examples of both transformers that conditionally operate on the content based on its type (#1) and model-specific tranformers (#2)。