2016-12-30 3 views
2

Я новичок в быстрой разработке и стараюсь включить бэкэнд. Я понял, что 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, и я не знаю, что я должен делать, если и то, и другое.

ответ

0

Обновление для будущих Googlers: мне удалось решить первую, изменив его:

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 Я был смущен, потому, что комментарий говорит: «возвращает истину, ложь для нечетных чисел», но функция возвращает NSNumber. Я изменил его, чтобы вернуть Bool, и это исправило ошибку, но это похоже на странную ошибку, которую они бы совершили. Я чувствую, что это может вызвать ошибки в Swift 2. Остальное я не выяснил ни ...