Как получить доступ к ответу JSON в Swift с помощью iOS SDK, созданного AWS API Gateway - PullRequest
0 голосов
/ 28 марта 2019

У меня есть работающий REST API, основанный на этом руководстве по API Gateway.Я могу успешно вызвать его через тестовую функциональность Консоли AWS;и я могу успешно вызвать его через мое простое приложение iOS Swift 4.2 Xcode с помощью симулятора iPhone XR.

Я знаю, что он работает через реальный, живой внешний вызов, потому что я вижу журналы Cloudwatch, которые всегда регистрируютсяответ 200 и отправляет результаты обратно клиенту.

Моя проблема действительно заключается в понимании кода Swift, и я надеюсь, что эксперт Swift сможет помочь мне понять, как распаковать result вкод ниже.

Вот мой код в ViewController.swift для вызова REST API и попытки печати result на консоль:

@IBAction func userInvokeApi(_ sender: UIButton) {
    print("You clicked invoke api...")
    let client = SVTLambdaGateClient.default()
    client.calcGet(operand2: "3", _operator: "+", operand1: "5").continueWith{ (task: AWSTask?) -> AnyObject? in
        if let error = task?.error {
            print("Error occurred: \(error)")
            return nil
        }

        if let result = task?.result {
            // Do something with result
            print("The result is... \(result)")
        }

        return nil
    }
}

Как указано в комментариях ниже, яполучаю следующий результат, потому что он печатает адрес объекта:

You clicked invoke api...
The result is... <AmplifyRestApiTest.Empty: 0x600002020770> {
}

(где AmplifyRestApiTest - имя моего проекта XCode.)

UPDATE Когда я устанавливаю точку останова в операторе print, это то, что я вижу на панели отладки:

Screenshot of debug pane showing trace at breakpoint at print statement.

ОБНОВЛЕНИЕ 2 Когда я печатаю task?.resultесть два жизнеспособных свойства согласно этому ответу от команды Amplify : error и result.Итак, поскольку мой API отвечает успешно, я предполагаю, что просто не знаю, как просмотреть result.

Может кто-нибудь помочь мне понять, какие шаги я должен предпринять, чтобы получить доступ к членам этого объекта класса?

Вот соответствующий метод в коде iOS Swift SDK, сгенерированном шлюзом API:

/*
 @param operand2 
 @param _operator 
 @param operand1 

 return type: Empty
 */
public func calcGet(operand2: String, _operator: String, operand1: String) -> AWSTask<Empty> {
    let headerParameters = [
               "Content-Type": "application/json",
               "Accept": "application/json",

            ]

    var queryParameters:[String:Any] = [:]
    queryParameters["operand2"] = operand2
    queryParameters["operator"] = _operator
    queryParameters["operand1"] = operand1

    let pathParameters:[String:Any] = [:]

    return self.invokeHTTPRequest("GET", urlString: "/calc", pathParameters: pathParameters, queryParameters: queryParameters, headerParameters: headerParameters, body: nil, responseClass: Empty.self) as! AWSTask<Empty>
}

Я вполне уверен, что этот тип возврата Empty относится к модели Empty, определенной дляREST API, как показано на скриншоте ниже.Я думаю, что он «пустой», потому что API не изменяет ответ от функции Lambda обратно клиенту.Итак, все это сквозное.В самом деле, учебное пособие объясняет, что другие модели - «Вывод» и «Результат» - не используются, поскольку они «полагаются на поведение сквозного прохождения и не используют эту модель».

Есть мысли?

API Gateway screenshot showing Empty model

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...