首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义Siesta中的内容转换器?

如何定义Siesta中的内容转换器?
EN

Stack Overflow用户
提问于 2016-03-18 15:19:30
回答 1查看 724关注 0票数 2

我只是在集成Siesta,我很喜欢它,它解决了我们在使用像RestKit这样的框架时遇到的许多问题。

我无法理解的是如何使用内容转换器?我看过这些文档和例子,我不太明白它是如何工作的,我也是Swift的新手。

看看这个例子,从另一个所以回答:

代码语言:javascript
复制
private let SwiftyJSONTransformer = ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
    JSON($0.content as AnyObject)
}

我不太明白这里发生了什么,没有返回值,所以我不明白内容是如何被转换的。这可能是我缺乏深刻的斯威夫特知识。

我已经了解了NSValueTransformer对象在Obj中是如何工作的,但是我无法解决如何将响应abit或者仅仅是一个简单的响应体(比如单个字符串、布尔值的数量或类型)映射到一个对象或类型。

我们有一些API响应,它们只返回响应体中的单个BOOL值,而大多数其他API响应是复杂的JSON对象图。

我将如何将这些响应映射到更原始的类型和或更复杂的对象。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-18 16:54:08

你的一些困惑是基本的迅速的东西。在闭包使用$0且只包含一条语句的情况下,将推断输入类型,并且return是隐式的。因此,您问题中的代码相当于:

代码语言:javascript
复制
ResponseContentTransformer(skipWhenEntityMatchesOutputType: false) {
  (content: AnyObject, entity: Entity) in
  return JSON(content)
}

(使用$0.content而不仅仅是$0是Swift中的一个可能bug--也许--特性的解决方案,$0成为所有参数的元组,而不仅仅是第一个参数。不要太担心;$0.content只是一个神奇的咒语,你可以在你的Siesta变压器中使用。)

你的另一半困惑是西斯塔本身。一般做法如下:

  1. 配置一个通用转换器,将原始NSData转换为已解码但非结构化的类型,如StringDictionary

  1. 可选地配置第二个转换器,将非结构化类型转换为模型。
    • 您通常会根据API路径来配置它。
    • 在默认情况下,午睡不包括任何这类内容;每个应用程序都是这样。

对于仅仅是一个普通布尔值的响应,您可能只执行#1 --具体取决于服务器发送的响应类型,以及取决于您如何知道它只是一个布尔值。

我推荐大家看看示例项目,它提供了一个很好的例子来说明这一切是如何进行的。您将在该代码中看到根据内容类型有条件地操作的变压器(#1)模型专用变压器(#2)的示例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36088096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档