Я новичок в быстрой разработке и стараюсь включить бэкэнд. Я понял, что AWS будет хорошим способом выполнить то, что я хочу сделать. В настоящее время я просто пытаюсь получить образец файла проекта, который они создают для вас, и у него так много ошибок, что это невероятно. Я понял, что AWS создает файлы в Swift 2, поэтому их запуск в Swift 3 довольно сложный.Множество ошибок при попытке использовать AWS DynamoDB с Swift 3
Я преобразовал код в Swift 3, когда я открыл его в xCode и сделал после этого 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 ?, 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?) ->())'
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' почти соответствует необязательному требованию 'getItemWithCompletionHandler' протокола 'Table' с различными именами методов и т. Д. Это только предупреждения, но мне дана рекомендация либо сделать это частным, либо добавить @nonobjc
, и я не знаю, что я должен делать, если и то, и другое.