(FYI Swift 5 Xcode 11.5)
Оказывается, после всего тестирования, которое я провел вчера перед тем, как опубликовать этот вопрос сегодня утром, я был очень близок к тому, чтобы получить правильный код.
в приведенном ниже коде у меня была опечатка с a) в userdatatype, которая нарушала begin_with. это должно было быть только V, а не v)
queryExpression.expressionAttributeValues = [
":UserID" : "1001",
":UserDataType" : "V)"
]
данные для 1001 затем вернулись с другой ошибкой
неопознанный селектор отправлен в экземпляр
это произошло из-за данные в БД для одной строки: json.
, когда я тестировал с другим идентификатором пользователя, он работает, как ожидалось.
Если вы используете мой рабочий код ниже в качестве примера, пока следуя руководству на AWS в ссылке, вы должны заставить работать begin_with.
https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-nosql-integrate-an-existing-table.html
func queryHiVizTable() {
// 1) Configure the query
let queryExpression = AWSDynamoDBQueryExpression()
queryExpression.keyConditionExpression = "#UserID = :UserID AND begins_with(#UserDataType, :UserDataType)"
queryExpression.expressionAttributeNames = [
"#UserID": "UserID",
"#UserDataType": "UserDataType"
]
queryExpression.expressionAttributeValues = [
":UserID" : "1001",
":UserDataType" : "V"
]
// 2) Make the query
let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
dynamoDbObjectMapper.query(HiViz.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in
print(queryExpression)
if error != nil {
print("The request failed. Error: \(String(describing: error))")
}
if output != nil {
for books in output!.items {
let booksItem = books as? HiViz
print("---utututut---\(booksItem!.VisitorID!)")
}
}
}
}