我是快速开发的新手,正在尝试合并后端。我认为 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)
line. “传递给不带参数的调用的参数”
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?, Error?) -> 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) 无法使用类型为“(Orders.Type, 表达式: AWSDynamoDBScanExpression, (AWSDynamoDBPaginatedOutput?, NSError?) -> ())”的参数列表调用“scan”
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
,如果有的话我不知道我应该做什么。