3
4

1 回答 1

0

您的问题的关键线索隐藏在该(也许不是理想的帮助)日志消息中:

Siesta.Error.Cause.WrongTypeInTranformerPipeline
  expectedType: "JSON"
  actualType: "__NSCFArray"

它是说你的转换器需要一个输入类型JSON,这是有道理的——你说的和 . 一样多($0.content as JSON)。但是,它得到了 type __NSCFArray,这是NSArray. 换句话说,它需要一个 SwiftyJSON 值,但它却得到了 NSJSONSerialization 的原始输出。

为什么?GithubBrowser 项目包括一个NSDict/NSArray → SwiftyJSON 转换器,它在解析阶段进行配置。该项目中的模型转换器都依赖于它。

要在您的项目中以相同的方式使用 SwiftyJSON,您需要将示例项目中的转换器包含在您的项目中:

private let SwiftyJSONTransformer =
  ResponseContentTransformer
    { JSON($0.content as AnyObject) }

然后在设置您的服务时:

service.configure {
  $0.config.pipeline[.parsing].add(SwiftyJSONTransformer, contentTypes: ["*/json"])
}

(请注意,如果您对错误感兴趣,可能需要创建ResponseContentTransformerwith 。)transformErrors: true


使用 SwiftyJSON 的另一种方法,它不是很漂亮,但需要较少的设置,是JSON在每个单独的响应转换器中手动包装东西:

service.configureTransformer("/users/*/repos") {
  JSON($0.content as AnyObject).arrayValue.map(Incident.init)
}
于 2016-08-02T03:11:32.147 回答