在我的Swift编写的iOS应用程序中,我连接了DynamoDB服务。
在HomeViewController
我正在扫描我的DynamoDB帐户中的一个表格,然后打印结果以检查它是否有效:
let scanExpression = AWSDynamoDBScanExpression()
scanExpression.filterExpression = "begins_with (id, :id)"
scanExpression.expressionAttributeValues = [":id": GlobalVars.id]
GlobalVars.dynamoDBObjectMapper.scan(Item.self, expression: scanExpression).continueWith(block: { (task:AWSTask<AWSDynamoDBPaginatedOutput>!) -> Any? in
if let error = task.error as NSError? {
print("The request failed. Error: \(error)")
} else if let paginatedOutput = task.result {
for item in paginatedOutput.items as! [Item] {
print("items", item)
GlobalVars.items += [item]
print("items array:", GlobalVars.items)
}
GlobalVars.numberOfItems = paginatedOutput.items.count
}
return ()
})
每次在for-in
循环中,它都会打印从表中获取的项目。每个项目本身都有7个属性,但是当它打印时,我只看到4个属性。我只看到String属性,没有其他3个(Float,Float,Boolean)。
当我尝试从扫描中的其中一个项目中获取Float属性时,我得到nil
。
看起来它只能获得字符串,而不是别的。
在TableViewController
上tableView(cellForRowAt:)
我有这个代码从项目中获取属性:
let item: Item = items[indexPath.row]
let name: String = item.name!
cell.itemNameLabel.text = name
let priceFloat: Float = item.price!
let price: String = priceFloat.description
cell.itemPriceLabel.text = price
我能够获得String类型的name
属性,但是我无法获得Float类型的price
属性。
如何解决此问题并使用扫描从DynamoDB表中获取Float和Boolean属性?
答案 0 :(得分:0)
显然,我在Item.swift
文件中使用了不同类型的价格变量。
而不是:
var price: Float?
var booleanValue: Bool?
我应该使用:
var price: NSNumber?
var booleanValue: NSNumber?
在Item.swift
档案。