Siestaフレームワークを使用して、APIエンドポイントhttps://thecountedapi.com/api/countedにGETリクエストを行う必要があるアプリを構築しています。エンドポイントはhttps://api.github.com/users/ebelinski/reposのようなエンドポイントのようにJSON配列を返します。これはSiestaの例のGithub Browserで使用されています。その結果、私は自分のアプリがシエスタを利用するようにしようとしています。その後JSON配列を含むAPIエンドポイント用のシエスタトランスを作成するにはどうすればよいですか?
let API = Service(baseURL: "https://thecountedapi.com/api")
application:didFinishLaunchingWithOptions
の私のエンドポイント用の変圧器:インシデントは、JSONオブジェクトにかかる初期化子を持つ構造体である
API.configureTransformer("/counted") {
($0.content as JSON).arrayValue.map(Incident.init)
}
私は、サービスを作成します。
let resource = API.resource("/counted")
とviewDidLoad
で:
はその後、私のビューコントローラでは、私はリソースを作成
resource.addObserver(self)
とviewWillAppear
で:
resource.loadIfNeeded()
その後、私は、以下の機能を持っています私のVCで変更を聞く:
func resourceChanged(resource: Resource, event: ResourceEvent) {
print(resource.jsonArray)
if let error = resource.latestError {
print(error.userMessage)
return
}
if let content: [Incident] = resource.typedContent() {
print("content exists")
incidents = content
}
print(incidents.count)
}
私のアプリを実行すると、結果が混乱します。 print(resource.jsonArray)
は[]
と表示され、Cannot parse server response
というエラーメッセージが表示され、Siesta.enabledLogCategories = LogCategory.detailed
と設定すると、エラーメッセージ[Siesta:StateChanges] Siesta.Resource(https://thecountedapi.com/api/counted)[] received error: Error(userMessage: "Cannot parse server response", httpStatusCode: nil, entity: nil, cause: Optional(Siesta.Error.Cause.WrongTypeInTranformerPipeline(expectedType: "JSON", actualType: "__NSCFArray", transformer: Siesta.ResponseContentTransformer<SwiftyJSON.JSON, Swift.Array<TheCountedViewer.Incident…
が表示されます。
私がトランス全体をコメントアウトすると、print(resource.jsonArray)
が正しい配列をエンドポイントから出力するという点でいくつか成功しています。だから私の変圧器は、何らかの方法で間違っている必要がありますが、私はGithubのブラウザのように基本的に同じ変圧器を使用していると思う:
service.configureTransformer("https://stackoverflow.com/users/*/repos") {
($0.content as JSON).arrayValue.map(Repository.init)
}
私は何かが足りないのですか? - あなたが同じくらい言ったあなたの変圧器は理にかなってJSON
の入力タイプ、予想されることを言っている
Siesta.Error.Cause.WrongTypeInTranformerPipeline
expectedType: "JSON"
actualType: "__NSCFArray"
: