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 BFTasknil 的实例,但您 return 是 AWSDynamoDBPaginatedOutput。这就是编译器抱怨的原因。