Swift - 传递 DynamoDB 分页输出结果以在另一个 class 中运行
Swift - Passing DynamoDB Paginated Output results to function in another class
我正在尝试将 Amazon.swift 'AWS' class 中 DynamoDB 函数设置的结果传回我的 ViewController。目的是使用数据在地图上创建 GPS 点(ViewController 具有完整的 MapKit / mapView 设置)。
这是 DynamoDB 函数:
func read_multipin_data() -> AWSDynamoDBPaginatedOutput {
let cond = AWSDynamoDBCondition()
let v1 = AWSDynamoDBAttributeValue(); v1.S = ADate
cond.comparisonOperator = AWSDynamoDBComparisonOperator.EQ
cond.attributeValueList = [ v1 ]
let exp = AWSDynamoDBScanExpression()
exp.scanFilter = [ "date" : cond ]
self.scan(exp).continueWithSuccessBlock({ (task: BFTask!) -> BFTask! in
let results = task.result as AWSDynamoDBPaginatedOutput
return results // Error: 'AWSDynamoDBPaginatedOutput' is not convertible to 'BFTask'
})
}
func scan(expression : AWSDynamoDBScanExpression) -> BFTask! {
let mapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper()
return mapper.scan(AWS.self, expression: expression)
}
目前仅尝试恢复我 ViewController 中的数据的第二个函数是:
@IBAction func refresh_db_pins(){
let all_annotations_in: AWSDynamoDBPaginatedOutput = AWS().read_multipin_data()
}
我尝试 return 结果时遇到的错误是:
'AWSDynamoDBPaginatedOutput' 不能转换为 'BFTask'
我尝试了很多不同的方法,包括将 JSON 格式的数据转换为数组、字典,可惜没有任何效果。
非常感谢您的帮助!
您可以将 read_multipin_data
方法重写为:
func read_multipin_data() -> BFTask {
let cond = AWSDynamoDBCondition()
let v1 = AWSDynamoDBAttributeValue()
v1.S = ADate
cond.comparisonOperator = AWSDynamoDBComparisonOperator.EQ
cond.attributeValueList = [ v1 ]
let exp = AWSDynamoDBScanExpression()
exp.scanFilter = [ "date" : cond ]
return self.scan(exp);
}
在 continueWithSuccessBlock
中,您需要 return BFTask
或 nil
的实例,但您 return 是 AWSDynamoDBPaginatedOutput
。这就是编译器抱怨的原因。
我正在尝试将 Amazon.swift 'AWS' class 中 DynamoDB 函数设置的结果传回我的 ViewController。目的是使用数据在地图上创建 GPS 点(ViewController 具有完整的 MapKit / mapView 设置)。
这是 DynamoDB 函数:
func read_multipin_data() -> AWSDynamoDBPaginatedOutput {
let cond = AWSDynamoDBCondition()
let v1 = AWSDynamoDBAttributeValue(); v1.S = ADate
cond.comparisonOperator = AWSDynamoDBComparisonOperator.EQ
cond.attributeValueList = [ v1 ]
let exp = AWSDynamoDBScanExpression()
exp.scanFilter = [ "date" : cond ]
self.scan(exp).continueWithSuccessBlock({ (task: BFTask!) -> BFTask! in
let results = task.result as AWSDynamoDBPaginatedOutput
return results // Error: 'AWSDynamoDBPaginatedOutput' is not convertible to 'BFTask'
})
}
func scan(expression : AWSDynamoDBScanExpression) -> BFTask! {
let mapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper()
return mapper.scan(AWS.self, expression: expression)
}
目前仅尝试恢复我 ViewController 中的数据的第二个函数是:
@IBAction func refresh_db_pins(){
let all_annotations_in: AWSDynamoDBPaginatedOutput = AWS().read_multipin_data()
}
我尝试 return 结果时遇到的错误是: 'AWSDynamoDBPaginatedOutput' 不能转换为 'BFTask'
我尝试了很多不同的方法,包括将 JSON 格式的数据转换为数组、字典,可惜没有任何效果。
非常感谢您的帮助!
您可以将 read_multipin_data
方法重写为:
func read_multipin_data() -> BFTask {
let cond = AWSDynamoDBCondition()
let v1 = AWSDynamoDBAttributeValue()
v1.S = ADate
cond.comparisonOperator = AWSDynamoDBComparisonOperator.EQ
cond.attributeValueList = [ v1 ]
let exp = AWSDynamoDBScanExpression()
exp.scanFilter = [ "date" : cond ]
return self.scan(exp);
}
在 continueWithSuccessBlock
中,您需要 return BFTask
或 nil
的实例,但您 return 是 AWSDynamoDBPaginatedOutput
。这就是编译器抱怨的原因。