如何用按钮 increase/decrease 给标签值定价?
How to increase/decrease price label value with button?
我有两个标签。第一个是 quantityLabel
,第二个是 priceLabel
。当我点击增加或减少按钮时 priceLabel
增加或减少 quantityLabel
值。 (例如 1 个数量是 $15,00 2 个数量是 $30,00)
下面我试过了
var quantity = 1
var updateFoodPrice: Double? {
didSet {
foodPrice.text = "\(Double(quantity) * updateFoodPrice!)"
}
}
@IBAction func addQuantity(_ sender: Any) {
if quantity < 30 {
quantity += 1
foodQuantity.text = String(quantity)
}
}
@IBAction func decreasedQuantity(_ sender: Any) {
if quantity > 0 {
quantity -= 1
foodQuantity.text = String(quantity)
foodPrice.text? *= "\(quantity)"
}
}
编辑:添加了带有完整代码的 DetailVC
我的数据来自 MainVC table view selected cell to DetailVc
class 细节视图控制器:UIViewController {
@IBOutlet weak var foodTitle: UILabel!
@IBOutlet weak var foodSubTitle: UILabel!
@IBOutlet weak var foodPrice: UILabel!
@IBOutlet weak var drinkPicker: UITextField!
@IBOutlet weak var foodQuantity: UILabel!
var drinkPickerView = UIPickerView()
var selectDrinkType: [String] = []
var detailFoodName = ""
var detailFoodPrice = 0.0
var searchFoods: [String]!
var priceFood: [Double]!
let foods = Food(name: ["Hamburger big mac",
"Patates",
"Whopper",
"Steakhouse"], price: [15.0, 20.0, 25.0, 30.0])
let food: Food! = nil
var foodPriceCount = FoodPriceCount(quantity: 1, foodPrice: 15.0) {
didSet {
foodQuantity.text = "\(foodPriceCount.quantity)"
foodPrice.text = "\(Double(foodPriceCount.quantity) * foodPriceCount.foodPrice)TL"
}
}
@IBAction func addQuantity(_ sender: Any) {
if foodPriceCount.quantity < 30 {
foodPriceCount.quantity += 1
}
}
@IBAction func decreasedQuantity(_ sender: Any) {
if foodPriceCount.quantity > 0 {
foodPriceCount.quantity -= 1
}
}
viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
foodQuantity.text = "1"
searchFoods = foods.name
priceFood = foods.price
foodTitle.text = detailFoodName
foodPrice.text = String(detailFoodPrice)
在 addQuantity
方法中,您不更新价格标签,在 decreaseQuantity
方法中,您不能使用标签的文本(字符串)并对其进行数学计算。
我建议使用一个包含两个值的结构。使用结构的好处是它是不可变的。因此,每次更新其中的 属性 时,它都会创建一个新的结构实例。这样我们就可以在每次有变化时使用 didSet
回调来更新标签。
定义一个 ViewModel 结构
struct ViewModel {
var quantity: Int
var foodPrice: Double
}
更新标签
var viewModel = ViewModel(quantity: 1, foodPrice: 10) {
didSet {
foodQuantityLabel.text = "\(viewModel.quantity)"
foodPriceLabel.text = "\(Double(viewModel.quantity) * viewModel.foodPrice)"
}
}
@IBAction func addQuantity(_ sender: Any) {
if viewModel.quantity < 30 {
viewModel.quantity += 1
}
}
@IBAction func decreasedQuantity(_ sender: Any) {
if viewModel.quantity > 0 {
viewModel.quantity -= 1
}
}
我有两个标签。第一个是 quantityLabel
,第二个是 priceLabel
。当我点击增加或减少按钮时 priceLabel
增加或减少 quantityLabel
值。 (例如 1 个数量是 $15,00 2 个数量是 $30,00)
下面我试过了
var quantity = 1
var updateFoodPrice: Double? {
didSet {
foodPrice.text = "\(Double(quantity) * updateFoodPrice!)"
}
}
@IBAction func addQuantity(_ sender: Any) {
if quantity < 30 {
quantity += 1
foodQuantity.text = String(quantity)
}
}
@IBAction func decreasedQuantity(_ sender: Any) {
if quantity > 0 {
quantity -= 1
foodQuantity.text = String(quantity)
foodPrice.text? *= "\(quantity)"
}
}
编辑:添加了带有完整代码的 DetailVC 我的数据来自 MainVC table view selected cell to DetailVc class 细节视图控制器:UIViewController {
@IBOutlet weak var foodTitle: UILabel!
@IBOutlet weak var foodSubTitle: UILabel!
@IBOutlet weak var foodPrice: UILabel!
@IBOutlet weak var drinkPicker: UITextField!
@IBOutlet weak var foodQuantity: UILabel!
var drinkPickerView = UIPickerView()
var selectDrinkType: [String] = []
var detailFoodName = ""
var detailFoodPrice = 0.0
var searchFoods: [String]!
var priceFood: [Double]!
let foods = Food(name: ["Hamburger big mac",
"Patates",
"Whopper",
"Steakhouse"], price: [15.0, 20.0, 25.0, 30.0])
let food: Food! = nil
var foodPriceCount = FoodPriceCount(quantity: 1, foodPrice: 15.0) {
didSet {
foodQuantity.text = "\(foodPriceCount.quantity)"
foodPrice.text = "\(Double(foodPriceCount.quantity) * foodPriceCount.foodPrice)TL"
}
}
@IBAction func addQuantity(_ sender: Any) {
if foodPriceCount.quantity < 30 {
foodPriceCount.quantity += 1
}
}
@IBAction func decreasedQuantity(_ sender: Any) {
if foodPriceCount.quantity > 0 {
foodPriceCount.quantity -= 1
}
}
viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
foodQuantity.text = "1"
searchFoods = foods.name
priceFood = foods.price
foodTitle.text = detailFoodName
foodPrice.text = String(detailFoodPrice)
在 addQuantity
方法中,您不更新价格标签,在 decreaseQuantity
方法中,您不能使用标签的文本(字符串)并对其进行数学计算。
我建议使用一个包含两个值的结构。使用结构的好处是它是不可变的。因此,每次更新其中的 属性 时,它都会创建一个新的结构实例。这样我们就可以在每次有变化时使用 didSet
回调来更新标签。
定义一个 ViewModel 结构
struct ViewModel {
var quantity: Int
var foodPrice: Double
}
更新标签
var viewModel = ViewModel(quantity: 1, foodPrice: 10) {
didSet {
foodQuantityLabel.text = "\(viewModel.quantity)"
foodPriceLabel.text = "\(Double(viewModel.quantity) * viewModel.foodPrice)"
}
}
@IBAction func addQuantity(_ sender: Any) {
if viewModel.quantity < 30 {
viewModel.quantity += 1
}
}
@IBAction func decreasedQuantity(_ sender: Any) {
if viewModel.quantity > 0 {
viewModel.quantity -= 1
}
}