我最近将我的项目更新为 Swift 4,现在当我扫描我的 Amazon 数据库时,属性返回 nil。这是我的扫码:
let scanExpression = AWSDynamoDBScanExpression()
scanExpression.filterExpression = "contains(Name, :name)"
scanExpression.expressionAttributeValues = [":name": (user?.username)!]
dynamoDBObjectMapper.scan(DBPerson.self, expression: scanExpression).continueWith(block: { (task:AWSTask!) -> Any? in
if let error = task.error as NSError? {
print("The request failed. Error: \(error)")
} else if let paginatedOutput = task.result {
DispatchQueue.main.async(execute: {
self.people.removeAll()
for person in paginatedOutput.items as! [DBPerson] {
self.people += [person] //breakpoint here
}
self.tableView.reloadData()
})
}
return nil
})
还有我的 DBPerson 类:
import AWSDynamoDB
class DBPerson : AWSDynamoDBObjectModel, AWSDynamoDBModeling {
var Name: String?
var Occupation: String?
class func dynamoDBTableName() -> String {
return "People"
}
class func hashKeyAttribute() -> String {
return "Name"
}
}
我在扫描循环中设置了一个断点来查看我的属性,它们总是返回 nil。我的项目在更新到 Swift 4 之前正在运行,在我的表中显示了属性。我试过将 Name 和 Occupation 的类型(在 DBPerson 类中)更改为 NSString、NSArray 之类的类型,甚至更改为 Substring 和 CFString 之类的黑暗镜头。
我的 DynamoDB 表存在其中的值,并且返回了正确数量的项目,但属性值始终为零。这是我 table 上的一个 sample :
{
"Name": "Bill",
"Occupation": "Firefighter"
}
除了转换回 Swift 3 之外,还有其他解决方案吗?谢谢。
最佳答案
这是由于 Swift 4 中推理 @objc
行为的改变。您需要使用 @objc 标记 ObjectiveC 可用的属性,或使用 @objcMembers
例子引用: https://github.com/aws/aws-sdk-ios/issues/750#issuecomment-337046816
关于ios - 适用于 iOS 的 AWS DynamoDB 字符串属性返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46574023/