比较非可选值会导致错误

时间:2016-10-07 20:35:38

标签: swift firebase

我准备将非可选值与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 nilCOALESCE('', '','THIS') ,但我说要做到#34; N / A"如果它是零,为什么?

1 个答案:

答案 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。