如何在Firestore中移除int、double、float的可选值?

3

我正在尝试从我的Firestore中检索总和的数字类型/值,到目前为止我的代码已经工作了,只是在price.text = "$\(product.price)处显示"$可选值:30",而不是应该显示"$ 30"。

我已经使用了INT、FLOAT和DOUBLE(无论是? /!),但在标签中仍然得到相同的结果,显示"$Optional value: 30"。

当使用模拟器时,我只想消除价格标签中的“optional value”。

import Foundation
import UIKit

class List {
    var id: String
    var name: String
    var price: Float!                                       

    init(id: String,
         name: String,
         price: Float!) {                                             

         self.id = id
         self.name = name
         self.price = price
     }

     convenience init(dictionary: [String : Any]) {
        let id = dictionary["id"] as? String ?? ""
        let name = dictionary["name"] as? String ?? ""
        let price =  dictionary["price"] as? Float               

        self.init(id: id,
                  name: name,
                  price: price)
    }

}

import UIKit
import Firebase

class ListCell: UITableViewCell {

    weak var list: List!

    @IBOutlet weak var productName: UILabel!
    @IBOutlet weak var price: UILabel!

    func configure(withList list: List) {
        productName.text = product.name
        price.text = "$\(product.price)"
    }
}
1个回答

1

price 声明为非可选项

var price: Float 

...

init(id: String,
     name: String,
     storeName: String,
     brand: String,
     category: String,
     strain: String,
     price: Float) {    

并分配一个默认值,就像其他属性一样。
let price =  dictionary["price"] as? Float ?? 0.0

使用NumberFormatter来显示最多2位小数的价格值。
let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
price.text = "$\(formatter.string(for: product.price)!)"

不要滥用String(describing,因为brandname已经是字符串了
productName.text = "\(product.brand): \(product.name)"

它能工作!但是我该如何去掉小数点呢?因为现在它显示的是“$30.0”。 - Evelyn
你需要添加一个NumberFormatter - vadian
我不想给你添麻烦,但我还是有点新手,因为我只做了大约3个月,但我该如何使用数字格式来完成它呢? - Evelyn
它又给我那个可选值了 :'( - Evelyn
我和你一样感到很奇怪,但目前它就是显示这个...抱歉,如果有帮助的话..你是最好的,因为你花时间帮助我。 - Evelyn
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接