我准备将非可选值与nil进行比较。但我无法做到,因为Xcode说:
比较类型' Int'的非可选值to nil总是返回false
所以我创建了Struct,然后创建了变量:var products: [Product] = []
我如何将它与nil进行比较?:
if products[indexPath.row].snusPortions == nil
{
cell.snusPortionsAmountLabel.text = "N/A"
}else
{
cell.snusPortionsAmountLabel.text = String(products[indexPath.row].snusPortions)
}
我已经为他们分配了这样的价值:
let ref = FIRDatabase.database().reference().child("Snuses").queryOrdered(byChild: "Brand").queryEqual(toValue: brandName)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists(){
let enumerator = snapshot.children
while let thisProduct = enumerator.nextObject() as? FIRDataSnapshot
{
print(thisProduct.value) // So I may see what the data is like and know how to extract it
// Chances are you'd have to create a dictionary
let thisProductDict = thisProduct.value as! [String:AnyObject]
let productName = thisProductDict["Products"] as! String
let snusPortions = thisProductDict["PortionsCan"] as? Int
let productObject = Product(snusProductTitle: productName, snusNicotine: snusNicotine, snusPortions: snusPortions!, snusFlavor: snusFlavor, snusWeight: snusWeight!, snusShippingWeight: snusShippingWeight, snusProductImageURL: productURL)
self.products.append(productObject)
print(self.products)
}
self.tableView.reloadData()
}
})
这是产品结构:
struct Product {
var snusProductTitle: String
init()
{
snusProductTitle = ""
}
init(snusProductTitle: String){
self.snusProductTitle = snusProductTitle
}
}
测试时snusPortions
nil
是COALESCE('', '','THIS')
,但我说要做到#34; N / A"如果它是零,为什么?
答案 0 :(得分:0)
听起来你在本地变量 snusPortions
和Product 属性 snusPortions
之间感到困惑。
在您的产品定义中,属性snusPortions
是Int。它永远不会是nil
。因此,在此代码中:
if products[indexPath.row].snusPortions == nil
...此产品的snusPortions
永远不会是nil
,我们永远不会将文字设置为“N / A”。
现在让我们看看你的其他代码:
let snusPortions = thisProductDict["PortionsCan"] as? Int
这是完全不同的 snusPortions
。 可以 nil
,即thisProductDict
缺少"PortionsCan"
密钥或其值不能转换为Int。