Swift: 为什么我可以把信息从一个IBAction传到另一个IBAction,而不是传给一个函数

问题描述 投票:0回答:1

我试图将splitValue和tipPercent的值放入底部的getSettings()中。 为什么我可以在IBAction calculatePressed中得到这两个值,但当我试图将值放入函数中时,值是nil。 我很困惑。 谢谢你的帮助!我正在尝试获取这两个函数的值。

@IBOutlet weak var billTextField: UITextField!
@IBOutlet weak var zeroPctButton: UIButton!
@IBOutlet weak var tenPctButton: UIButton!
@IBOutlet weak var twentyPctButton: UIButton!
@IBOutlet weak var splitNumberLabel: UILabel!

var tipChosen = ""
var totalPerPerson = ""
var tipPercent = ""
var splitValue = ""

@IBAction func tipChanged(_ sender: UIButton) {
    tipPercent = sender.currentTitle!

    if sender.isSelected == true {
        return
    }

    zeroPctButton.isSelected = false
    tenPctButton.isSelected = false
    twentyPctButton.isSelected = false
    sender.isSelected = true

    if sender.currentTitle == "0%" {
        tipChosen = "0.00"
    } else if sender.currentTitle == "10%" {
        tipChosen = "0.10"
    } else if sender.currentTitle == "20%" {
        tipChosen = "0.20"
    }

    billTextField.endEditing(true)
}

@IBAction func stepperValueChanged(_ sender: UIStepper) {
    splitValue = String(Int(sender.value))
    splitNumberLabel.text = String(Int(sender.value))

}

@IBAction func calculatePressed(_ sender: UIButton) {
    let bill = Float(billTextField.text!)!
    let tip = Float(tipChosen)!
    let tax = bill * tip
    let splitNumber = Float(splitNumberLabel.text!)
    let total = (bill + tax) / Float(splitNumber!)
    totalPerPerson = "$\(String(format: "%.2f", total))"

    performSegue(withIdentifier: "goToTotal", sender: self)
}
func getSettings() -> String {
    return "Split between \(splitValue) people, with a \(tipPercent) tip."
}
swift function global ibaction
1个回答
0
投票

好吧,对不起,我花了一点时间,但我终于认为我明白我做了什么。

类 CalculatorViewController.UIViewController { UIViewController {

var tip = 0.0
var finalBill = ""
var split = 2

@IBOutlet weak var billTextField: UITextField!
@IBOutlet weak var zeroPctButton: UIButton!
@IBOutlet weak var tenPctButton: UIButton!
@IBOutlet weak var twentyPctButton: UIButton!
@IBOutlet weak var splitNumberLabel: UILabel!

@IBAction func tipChanged(_ sender: UIButton) {
    if sender.isSelected == false {
        sender.isSelected = false
    } else if sender.isSelected == true {
        sender.isSelected = true
    }

    zeroPctButton.isSelected = false
    tenPctButton.isSelected = false
    twentyPctButton.isSelected = false
    sender.isSelected = true

    billTextField.endEditing(true)
}

@IBAction func stepperValueChanged(_ sender: UIStepper) {

    splitNumberLabel.text = Int(sender.value).description

}

@IBAction func calculatePressed(_ sender: UIButton) {

    if zeroPctButton.isSelected == true {
        tip = 0.0
    } else if tenPctButton.isSelected == true {
        tip = 0.1
    } else if twentyPctButton.isSelected == true {
        tip = 0.2
    }
    print(tip)
    let bill = Double(billTextField.text!)
    split = Int(Double(splitNumberLabel.text!)!)

    if billTextField.text != "" {
        let billWithTip = (bill! * tip) + bill!
        let billWithTipSplit = billWithTip / Double(split)
        finalBill = String(format: "%.2f", billWithTipSplit)
        print(billWithTip)
    }

    self.performSegue(withIdentifier: "getResults", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "getResults" {
        let destinationVC = segue.destination as! ResultsViewController

        destinationVC.finalBill = finalBill
        destinationVC.split = split
        destinationVC.tip = tip

    }
}

}

class ResultsViewController.UIViewController { UIViewController {

@IBOutlet weak var totalLabel: UILabel!
@IBOutlet weak var settingsLabel: UILabel!

var tip = 0.0
var split = 2
var finalBill = ""

override func viewDidLoad() {
    super.viewDidLoad()

    totalLabel.text = "$\(finalBill)"
    settingsLabel.text = "Split between \(Int(split)) people, with a \(Int(tip * 100))% tip"
}

@IBAction func recalculatePressed(_ sender: UIButton) {
    dismiss(animated: true, completion: nil)

}

}

我按照你的建议,在第二个视图控制器上使用字符串和一些小计算,改变了一些声明的属性值,并摆脱了getSettings()。在我的印象中,如果没有函数的返回值,我是不能传递数据的。 谢谢你的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.