Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试将AWS DynamoDB与Swift 3一起使用时出现很多错误_Ios_Swift_Amazon Web Services_Swift3_Amazon Dynamodb - Fatal编程技术网

Ios 尝试将AWS DynamoDB与Swift 3一起使用时出现很多错误

Ios 尝试将AWS DynamoDB与Swift 3一起使用时出现很多错误,ios,swift,amazon-web-services,swift3,amazon-dynamodb,Ios,Swift,Amazon Web Services,Swift3,Amazon Dynamodb,我是swift开发的新手,正在尝试合并一个后端。我认为AWS将是一个很好的方式来完成我想做的事情。我目前正在尝试获取他们为您创建的示例项目文件,它有很多错误,令人难以置信。我意识到AWS是在Swift 2中创建文件的,所以在Swift 3中运行它们是相当困难的 当我在xCode中打开Swift 3时,我将代码转换为Swift 3,并在之后对代码行进行了30次修改,只是试图消除所有可能出现的错误。现在我被卡住了。有些线路我只是不知道该怎么做才能修复它。我会在下面列出一些,但是如果有人对最好的方法有

我是swift开发的新手,正在尝试合并一个后端。我认为AWS将是一个很好的方式来完成我想做的事情。我目前正在尝试获取他们为您创建的示例项目文件,它有很多错误,令人难以置信。我意识到AWS是在Swift 2中创建文件的,所以在Swift 3中运行它们是相当困难的

当我在xCode中打开Swift 3时,我将代码转换为Swift 3,并在之后对代码行进行了30次修改,只是试图消除所有可能出现的错误。现在我被卡住了。有些线路我只是不知道该怎么做才能修复它。我会在下面列出一些,但是如果有人对最好的方法有任何建议,或者可以帮助我修复下面的错误,我将不胜感激

1) 这里的问题是model.classForCoder.responses(响应:#选择器(awsdynamodmodeling.rangeKeyAttribute))。错误为“无法调用非函数类型的值((选择器->布尔)!”

2) “==生成的布尔值不是预期的上下文结果类型“NSNumber”

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

4) 问题在于
objectMapper.load
。无法将类型为“(AWSDynamoDBObjectModel?,NSError?)->Void”的值转换为预期的参数类型“((AWSDynamoDBObjectModel?,Error?->Void)?”

5) 无法使用类型为“(Orders.type,表达式:AWSDynamoDBScanExpression,(awsdynamodbaginatedoutput?,NSError?)->()的参数列表调用“scan”


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

为未来的谷歌用户更新: 我将第一个问题改为:

if 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点我很困惑,因为注释说“对于奇数返回true,对于奇数返回false”,但函数返回一个NSNumber。我把它改成了return Bool,并修复了错误,但这似乎是他们会犯的一个奇怪的错误。我觉得这也会导致Swift 2中的错误。剩下的我也没弄明白

class func randomSampleBOOL() -> NSNumber {
    // If random number is even number then return true, false for odd numbers
    return self.randomNumber() % 2 == 0
}
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
            })
        }
    })
}
 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)
        })
    })
}
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
if let rangeKeyAttribute = model.classForCoder.rangeKeyAttribute?() {
        let index = keys.index(of: rangeKeyAttribute)
        if let index = index {
            keys.remove(at: index)
            keys.insert(rangeKeyAttribute, at: 0)
        }
    }