处理多种条件的简单方法

时间:2015-01-29 20:41:05

标签: ios xcode swift

在这个应用程序中,我正在研究我有9个UiSwitch,我正在使用它来增加披萨的费用,以便选择

mushroom - 0.10
cheese - 0.20
pepperoni 0.50
sausage - 0.45
jalapeno - 0.40
pineapple - .30
olive - 0.60
ham - .75
bacon 1.00

数百种可能的组合我的问题是如何在不必拥有一大堆if语句的情况下计算费用,因为目前我正在做的事情

3 个答案:

答案 0 :(得分:1)

只需为模型中的每个UISwitch关联一个值,然后循环浏览所有开关,找出哪些是on。如果开关为on,则将其关联值添加到总数中。

或者,你可以为每个开关实现一个委托(尽管应该是同一个对象),当一个开关被轻敲时触发计算。

备选方案#2(但这很难看):为每个UISwitch分配一个'标签',并带有相应的顶部值(但标签是整数),并对分配有on个开关的标签求和。再次,编码非常糟糕。

答案 1 :(得分:1)

只需创建NSMutableArray,只要切换UISwitch,就可以向NSMutableArray添加/删除相应的值。当单击“submit”按钮或其他任何内容时,只需迭代数组并使用简单的for statement

对所有节点求和

答案 2 :(得分:-2)

所以,这是实现你想要的方法。您将顶部的价格与tag的{​​{1}}属性相关联。然后,您可以简单地迭代您已获得的UISwitch个对象的数组,快速总结所选顶部的成本,不需要UISwitch个语句:

if
  

注意: 显然,您可能希望更新此UI布局。我猜你最终想把它放在// ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad () { super.viewDidLoad() setupUserInterface() } var switches: [UISwitch] = [UISwitch]() var toppingNames = ["Mushrooms", "Cheese", "Pepperoni", "Sausage", "Jalapeño", "Pineapple", "Olive", "Ham", "Bacon"] var toppingCosts = [10, 20, 50, 45, 40, 30, 60, 75, 100] var costLabel: UILabel = UILabel() func switchFlipped () { var cost: CGFloat = costForSelectedToppings() var formatter: NSNumberFormatter = NSNumberFormatter() formatter.numberStyle = .CurrencyStyle var costString: String = formatter.stringFromNumber((cost))! self.costLabel.text = "Cost for toppings: " + costString } func costForSelectedToppings () -> CGFloat { var cost: CGFloat = 0.0 for swtch: UISwitch in self.switches { if (swtch.on == true) { cost = cost + (CGFloat)(swtch.tag) } } return cost / 100.0 } func setupUserInterface () { var previousLabel: UILabel? for i in 0...8 { var label: UILabel = UILabel() var swtch: UISwitch = UISwitch() self.switches.append(swtch) label.text = self.toppingNames[i] swtch.tag = self.toppingCosts[i] label.setTranslatesAutoresizingMaskIntoConstraints(false) swtch.setTranslatesAutoresizingMaskIntoConstraints(false) swtch.addTarget(self, action: "switchFlipped", forControlEvents: .ValueChanged) self.view.addSubview(label) self.view.addSubview(swtch) self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat( "H:|-[label]-[switch]-|", options:NSLayoutFormatOptions(0), metrics:nil, views:["label" : label, "switch" : swtch])) self.view.addConstraint(NSLayoutConstraint( item: swtch, attribute:.CenterY, relatedBy:.Equal, toItem:label, attribute:.CenterY, multiplier:1.0, constant:0.0)) if let prev = previousLabel { self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[label1]-(spacing)-[label2]", options:NSLayoutFormatOptions(0), metrics:["spacing" : 16], views:["label1" : previousLabel!, "label2": label])) } else { self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-(margin)-[label]", options:NSLayoutFormatOptions(0), metrics:["margin" : 40], views:["label" : label])) } previousLabel = label } self.costLabel.setTranslatesAutoresizingMaskIntoConstraints(false) self.costLabel.text = "Cost for toppings: $0.00" self.view.addSubview(self.costLabel) self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[label]-|", options:NSLayoutFormatOptions(0), metrics:nil, views:["label" : self.costLabel])) self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[label1]-(spacing)-[label2]", options:NSLayoutFormatOptions(0), metrics:["spacing" : 16], views:["label1" : previousLabel!, "label2": self.costLabel])) } } 或者至少放在UITableView中以防内容在屏幕外运行。