使用元组和 3 个 UIPickerviews 计算小计

Calculate subtotal using tuples and 3 UIPickerviews

我是 Swift 编程的初学者。我创建了 3 个选择器视图并从元组中添加了一些值。我的挑战是我不知道如何将双打与元组分开并计算带数量的小计。无论 Picker2 上显示的机票类型是什么,我都需要将其乘以 Picker3 上的数量并显示小计。

这是我的代码。

import UIKit

class BuyTicketViewController: UIViewController, UIPickerViewDelegate,UIPickerViewDataSource, UITextFieldDelegate{
    @IBOutlet weak var Picker1: UIPickerView! = UIPickerView()
    @IBOutlet weak var Picker2: UIPickerView! = UIPickerView()
    @IBOutlet weak var Picker3: UIPickerView! = UIPickerView()
    @IBOutlet weak var cityTextField: UITextField!
    @IBOutlet weak var typeTextField: UITextField!
    @IBOutlet weak var qtyTextField: UITextField!

    var seletedItemArray = [(String,Double)]()
    var Cities = ["Las Vegas","Los Angeles","New York"]
    var typeLasVegas = [("City Tour  .50", 20.50),("Museum  .00", 10.00), ("Amusement Park  .00",75.00)]
    var typeLosAnglese = [("City Tour .99", 29.99),("Museum .00", 15.00), ("Amusement Park .99",79.99)]
    var typeNewYork = [("City Tour .99", 39.99),("Museum .50", 12.50), ("Amusement Park .00",65.00)]

    var Qt = [("1", 1.0),("2", 2.0),("3",3.0),("4", 4.0),("5",5.0),("6",6.0)]

    var subTotal = 0.0
    var ticketQty = 0
    var ticketPrice = 0.0

    override func viewDidLoad() {
        super.viewDidLoad()

        Picker1.isHidden = true
        Picker2.isHidden = true
        Picker3.isHidden = true

        cityTextField.delegate = self
        Picker1.delegate = self
        typeTextField.delegate = self
        Picker2.delegate = self
        qtyTextField.delegate = self
        Picker3.delegate = self

        self.cityTextField.inputView = self.Picker1
        self.typeTextField.inputView = self.Picker2
        self.qtyTextField.inputView = self.Picker3

        Picker1.tag = 0
        Picker2.tag = 1
        Picker3.tag = 2
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView.tag == 0
        {
            return Cities[row]
        }
        else if pickerView.tag == 1
        {
            return seletedItemArray[row].0
        }
        else if pickerView.tag == 2
        {
            return Qt[row].0
        }
        return ""
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if pickerView.tag == 0
        {
            return Cities.count
        }
        else if pickerView.tag == 1
        {
            return seletedItemArray.count
        }
        else if pickerView.tag == 2
        {
            return Qt.count
        }
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        if pickerView.tag == 0
        {
            switch row {
            case 0:
                seletedItemArray = typeLasVegas
            case 1:
                seletedItemArray = typeLosAnglese
            case 2:
                seletedItemArray = typeNewYork

            default:
                seletedItemArray = []
            }
            Picker2.reloadAllComponents()
            cityTextField.text = Cities[row]
            Picker1.isHidden = true
            Picker2.isHidden = false
        }
        else if pickerView.tag == 1
        {
            let item = seletedItemArray[row].0

            if seletedItemArray[row] == typeLasVegas[row]
            {
                typeTextField.text = item

            } else if seletedItemArray[row] == typeLosAnglese[row]
            {
                typeTextField.text = item
            }else if seletedItemArray[row] == typeNewYork[row]
            {
                typeTextField.text = item
            }

            Picker2.isHidden = true
        }
        else if pickerView.tag == 2
        {
            qtyTextField.text = Qt[row].0
            Picker3.isHidden = true
        }
    }

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        if textField == cityTextField
        {
            self.Picker1.isHidden = false
            typeTextField.text = ""
            qtyTextField.text = ""
        }
        else if textField == typeTextField
        {
            Picker2.isHidden = false
        }
        else if textField == qtyTextField
        {
            Picker3.isHidden = false
        }
        return false
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

元组中的元素被访问为 .0.1 等。这就是您计算 subtotal:

的方式
let picker2row = Picker2.selectedRow(inComponent: 0)
let picker3row = Picker3.selectedRow(inComponent: 0)

let subtotal = selectedItemArray[picker2row].1 * Qt[picker3row].1

如果你使用命名元组:

var selectedItemArray = [(title: String, price: Double)]()
var typeLasVegas: [(title: String, price: Double)] = [("City Tour  .50", 20.50),("Museum  .00", 10.00), ("Amusement Park  .00",75.00)]
var Qt: [(title: String, quantity: Double)] = [("1", 1.0),("2", 2.0),("3",3.0),("4", 4.0),("5",5.0),("6",6.0)]

那这个好看一点:

let subtotal = selectedItemArray[picker2row].price * Qt[picker3row].quantity