我有一个基于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
语句上设置断点时,这是在“调试”窗格中看到的:
更新2
当我键入task?.result
时,有两个可行的属性as per this answer from the Amplify team:error
和result
。因此,由于我的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函数对客户端的响应。因此,这都是直通的。确实,该教程解释说,未使用其他模型-输出和结果-因为它“依赖于传递行为并且不使用此模型。”
有什么想法吗?