2017-01-26 1 views
0

Свифт код 2.x выглядит следующим образом:Обновления AWS DynamoDB код Swift 3 вызывает ошибку

extension Table { 

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

    if (model.classForCoder.respondsToSelector("rangeKeyAttribute")) { 
     let rangeKeyAttribute = model.classForCoder.rangeKeyAttribute!() 
     let index = keys.indexOf(rangeKeyAttribute) 
     if let index = index { 
      keys.removeAtIndex(index) 
      keys.insert(rangeKeyAttribute, atIndex: 0) 
     } 
    } 
    model.classForCoder.hashKeyAttribute() 
    let hashKeyAttribute = model.classForCoder.hashKeyAttribute() 
    let index = keys.indexOf(hashKeyAttribute) 
    if let index = index { 
     keys.removeAtIndex(index) 
     keys.insert(hashKeyAttribute, atIndex: 0) 
    } 
    return keys 
} 

}

Линия:

if (model.classForCoder.respondsToSelector("rangeKeyAttribute")) { 

с Swift унаследованного компилятором дает предупреждение «Использование строкового литерала для Objective-C устарело, используйте #selector»

Он предоставляет возможность исправить его, whi ч изменяет его:

if (model.classForCoder.responds(to: #selector(AWSDynamoDBModeling.rangeKeyAttribute))) { 

Однако я тогда получаю сообщение об ошибке сказав: «((Селектор) -> Bool)»

Невозможно вызвать значение, не являющуюся функцией типа

Я искал Google как сумасшедший, пытаясь понять, как сделать этот Swift 3 совместимым, но не повезло. Некоторые специалисты Swift 3 будут очень благодарны!

ответ

0

Вы должны убедиться, что ваш класс получен из NSObject.

(На самом деле я не уверен, я нашел этот ответ в этой ссылке here)

Смежные вопросы