如何使用AWS API Gateway生成的iOS SDK在Swift中访问JSON响应

时间:2019-03-27 23:02:02

标签: ios swift xcode amazon-web-services aws-api-gateway

我有一个基于this API Gateway教程的REST API。我能够通过AWS控制台的测试功能成功调用它;而且我能够使用iPhone XR模拟器通过我的简单iOS Swift 4.2 Xcode应用程序成功调用它。

我知道它正在通过一个实时的实时外部呼叫运行,因为我可以看到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项目的名称。)

更新当我在print语句上设置断点时,这是在“调试”窗格中看到的:

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

更新2 当我键入task?.result时,有两个可行的属性as per this answer from the Amplify teamerrorresult。因此,由于我的API能够成功响应,所以我假设我只是不知道如何查看result

有人可以帮助我了解访问此类对象的成员必须采取哪些步骤吗?

以下是API网关生成的iOS Swift SDK代码中的相应方法:

/*
 @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的返回类型是指为REST API定义的Empty模型,如下面的屏幕快照所示。我认为它是“空的”,因为API不会更改Lambda函数对客户端的响应。因此,这都是直通的。确实,该教程解释说,未使用其他模型-输出和结果-因为它“依赖于传递行为并且不使用此模型。”

有什么想法吗?

API Gateway screenshot showing Empty model

0 个答案:

没有答案