UISwitch сохранение значений для использования в функции - PullRequest
0 голосов
/ 26 октября 2019

Когда пользователь включает переключатель, я хотел бы, чтобы случайное значение отображалось на UILabel, затем принимало это же случайное значение и использовало его для умножения и нахождения другого значения. Я думаю, что моя проблема в том, что я пытаюсь использовать оператор let для хранения значения, а затем пытаюсь вызвать это значение let из другой функции, но я не знаю другого пути к этому.

Я уже могу получить случайное значение, которое появится на UILabel после того, как переключатель активен. Затем, когда коммутатор не активен, на UILabel остается значение 0.

IBOutlet для коммутатора:

@IBOutlet weak var tipSwitch: UISwitch!

Это действие для коммутатора:

@IBAction func switchChanged(_ sender: UISwitch) {
    if sender.isOn{
        sender.setOn(false, animated: true)
        percentPlaceholder.text! = String(0) + "%"


    }
    else{
        sender.setOn(true, animated: true)
        let randomTip = Int.random(in: 1...100)
        percentPlaceholder.text! = String(randomTip)
        calculateTipSwitch()
    }

}

Это функция CalculayTipSwitch:

func calculateTipSwitch() {
    var tipAmountSwitch = Float()
    var totalCostSwitch = Float()
    if let billAmountSwitch = Float(billCost.text!) {
        tipAmountSwitch = billAmountSwitch * randomTip / 100
        totalCostSwitch = tipAmountSwitch + billAmountSwitch
    }
    else {
        tipAmountSwitch = 0
        totalCostSwitch = 0
    }
    tipDollarAmt.text! = String(format: "%.2f", tipAmountSwitch)
    totalBill.text! = String(format: "%.2f", totalCostSwitch)
}

Вот весь мой код, если вы хотите лучше понять, что я пытаюсь выполнить:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var billCost: UITextField!
    @IBOutlet weak var percentPlaceholder: UILabel!
    @IBOutlet weak var tipDollarAmt: UILabel!
    @IBOutlet weak var totalBill: UILabel!
    @IBOutlet weak var tipSlider: UISlider!
    @IBOutlet weak var tipSegment: UISegmentedControl!
    @IBOutlet weak var tipStepper: UIStepper!
    @IBOutlet weak var tipSwitch: UISwitch!
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let allowed = CharacterSet(charactersIn: ".1234567890")
    return string.rangeOfCharacter(from: allowed) != nil
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    billCost.resignFirstResponder()
    return true
}

override func viewDidLoad() {
    super.viewDidLoad()
    percentPlaceholder.text = ""
    tipDollarAmt.text = ""
    totalBill.text = ""
}
@IBAction func sliderChanged(_ sender: UISlider) {
    percentPlaceholder.text! = String(Int(sender.value)) + "%"
    tipStepper.value = Double(Int(tipSlider.value))
    calculateTip()
}
@IBAction func selectorChanged(_ sender: UISegmentedControl) {

}
@IBAction func stepperChanged(_ sender: UIStepper) {
    percentPlaceholder.text! = String(sender.value) + "%"
    tipSlider.value = Float(tipStepper.value)
    calculateTipStep()
}
@IBAction func switchChanged(_ sender: UISwitch) {
    if sender.isOn{
        sender.setOn(false, animated: true)
        percentPlaceholder.text! = String(0) + "%"


    }
    else{
        sender.setOn(true, animated: true)
        let randomTip = Int.random(in: 1...100)
        percentPlaceholder.text! = String(randomTip)

    }

}

func calculateTip()
{
    var tipAmount = Float()
    var totalCost = Float()
    if let billAmount = Float(billCost.text!) {
        tipAmount = billAmount * tipSlider.value / 100
        totalCost = tipAmount + billAmount
    }
    else {
        tipAmount = 0
        totalCost = 0
    }
    tipDollarAmt.text! = String(format: "%.2f", tipAmount)
    totalBill.text! = String(format: "%.2f", totalCost)
}
func calculateTipStep() {
    var tipAmountStep = Float()
    var totalCostStep = Float()
    if let billAmountStep = Float(billCost.text!) {
        tipAmountStep = billAmountStep * Float(tipStepper.value) / 100
        totalCostStep = tipAmountStep + billAmountStep
    }
    else {
        tipAmountStep = 0
        totalCostStep = 0
    }
    tipDollarAmt.text! = String(format: "%.2f", tipAmountStep)
    totalBill.text! = String(format: "%.2f", totalCostStep)
}
func calculateTipSwitch() {
    var tipAmountSwitch = Float()
    var totalCostSwitch = Float()
    if let billAmountSwitch = Float(billCost.text!) {
        tipAmountSwitch = billAmountSwitch * randomTip / 100
        totalCostSwitch = tipAmountSwitch + billAmountSwitch
    }
    else {
        tipAmountSwitch = 0
        totalCostSwitch = 0
    }
    tipDollarAmt.text! = String(format: "%.2f", tipAmountSwitch)
    totalBill.text! = String(format: "%.2f", totalCostSwitch)
}
}

По сути, моя проблема в том, что я не могу использовать это случайное число в другой функции, поэтому мне просто нужна помощь, чтобы перезвонить на этот случайный совет.

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

В функции switchChanged () вы устанавливаете для randomTip значение %Placeholder.text, поэтому в других функциях вы можете просто вызвать его.

let randomTip = percentPlaceholder.text

Или другой способ сделать это - объявить переменную randomTip вне функции как свойство класса.

class ViewController : UIViewController {

    //IBOutlets here 

    var randomTip : String?

    //functions here
}

Затем, когда вы установите для него значениев switchChanged () его можно вызывать в других функциях.

0 голосов
/ 26 октября 2019

Вы можете добавить параметр к calculateTipSwitch и передать случайное число в качестве аргумента методу calculateTipSwitch. Измените calculateTipSwitch на:

func calculateTipSwitch(tipPercentage: Int) {
    var tipAmountSwitch = Float()
    var totalCostSwitch = Float()
    if let billAmountSwitch = Float(billCost.text!) {
        tipAmountSwitch = billAmountSwitch * tipPercentage / 100.0
        totalCostSwitch = tipAmountSwitch + billAmountSwitch
    }
    else {
        tipAmountSwitch = 0
        totalCostSwitch = 0
    }
    tipDollarAmt.text! = String(format: "%.2f", tipAmountSwitch)
    totalBill.text! = String(format: "%.2f", totalCostSwitch)
}

Затем в switchChanged:

let randomTip = Int.random(in: 1...100)
percentPlaceholder.text! = String(randomTip)
calculateTipSwitch(tipPercentage: randomTip)
...