尝试将AWS DynamoDB与Swift 3一起使用时出现大量错误

时间:2016-12-30 21:30:36

标签: ios swift amazon-web-services swift3 amazon-dynamodb

我是快速发展的新手,我正在尝试合并后端。我认为AWS将是实现我想要完成的工作的好方法。我目前正在尝试获取他们为您创建的示例项目文件,并且它有很多错误,这是令人难以置信的。我已经意识到AWS在Swift 2中创建了文件,因此在Swift 3中运行它们非常困难。

当我在xCode中打开代码时,我将代码转换为Swift 3,并在此之后对行进行了30次更改,只是试图摆脱我能做的所有错误。而现在我被卡住了。有些行我不知道该怎么做以解决它。我将在下面列出一些,但如果有人有关于最佳方式的任何提示,或者可以帮我修复下面的错误,我将非常感激。

1)这里的问题是model.classForCoder.responds(to: #selector(AWSDynamoDBModeling.rangeKeyAttribute))。错误说“无法调用非函数类型的值((Selector - > Bool)!”

func produceOrderedAttributeKeys(_ model: AWSDynamoDBObjectModel) -> [String] {
    let keysArray = Array(model.dictionaryValue.keys)
    var keys = keysArray as! [String]
    keys = keys.sorted()

    if (model.classForCoder.responds(to: #selector(AWSDynamoDBModeling.rangeKeyAttribute))) {
        let rangeKeyAttribute = model.classForCoder.rangeKeyAttribute!()
        let index = keys.index(of: rangeKeyAttribute)
        if let index = index {
            keys.remove(at: index)
            keys.insert(rangeKeyAttribute, at: 0)
        }
    }

2)“==生成Bool而不是预期的上下文结果类型'NSNumber'”

class func randomSampleBOOL() -> NSNumber {
    // If random number is even number then return true, false for odd numbers
    return self.randomNumber() % 2 == 0
}

3)问题出在loadNextPage(completionHandler)行。 “参数传递给不带参数的调用”

func loadMoreResults() {
    loading = true
    paginatedOutput?.loadNextPage(completionHandler: {(error: NSError?) -> Void in
        if error != nil {
            print("Failed to load more results: \(error)")
            DispatchQueue.main.async(execute: {
                self.showAlertWithTitle("Error", message: "Failed to load more more results: \(error?.localizedDescription)")
            })
        }
        else {
            DispatchQueue.main.async(execute: {
                self.results!.append(contentsOf: self.paginatedOutput!.items)
                self.tableView.reloadData()
                self.loading = false
            })
        }
    })
}

4)问题在于objectMapper.load无法转换类型'的值(AWSDynamoDBObjectModel?,NSError?) - > Void'到预期的参数类型'((AWSDynamoDBObjectModel?,错误?) - > Void)?'

 func getItemWithCompletionHandler(_ completionHandler: @escaping (_ response: AWSDynamoDBObjectModel?, _ error: NSError?) -> Void) {
    let objectMapper = AWSDynamoDBObjectMapper.default()
    objectMapper.load(Orders.self, hashKey: "demo-email-3", rangeKey: 1111500000, completionHandler: {(response: AWSDynamoDBObjectModel?, error: NSError?) -> Void in
        DispatchQueue.main.async(execute: {
            completionHandler(response, error)
        })
    })
}

5)无法使用类型'的参数列表调用'scan'(Orders.Type,expression:AWSDynamoDBScanExpression,(AWSDynamoDBPaginatedOutput?,NSError?) - >())'

let objectMapper = AWSDynamoDBObjectMapper.default()
    let scanExpression = AWSDynamoDBScanExpression()
    scanExpression.filterExpression = "begins_with(#email, :email)"
    scanExpression.expressionAttributeNames = ["#email": "email"]
    scanExpression.expressionAttributeValues = [":email": "demo-"]

    objectMapper.scan(Orders.self, expression: scanExpression) { (response: AWSDynamoDBPaginatedOutput?, error: NSError?) in

6)最后,有15个这样的实例方法'getItemWithCompletionHandler'几乎匹配协议'Table'的可选要求'getItemWithCompletionHandler',具有各种不同的方法名称等。这些只是警告,但我建议将其设为私有或添加@nonobjc,我不知道应该做什么,如果有的话。

1 个答案:

答案 0 :(得分:0)

未来Google员工的更新: 我设法通过将其更改为:

来解决第一个问题
(left_lines)/2

Number 2我很困惑,因为评论说“返回true,false表示奇数”,但函数返回NSNumber。我把它更改为返回Bool并修复了错误,但这似乎是他们本来会犯的奇怪错误。我觉得这也会导致Swift 2出错。其余我还没弄明白...