In Swift, can I refer to a UILabel variable using the String parameter passed to the function?

Is there a way in Swift to assign variables by referencing the String parameter passed to the function?

My goal is to write a generic function that allows me to update UILabel text based on its String parameter. In particular, the function must find the UILabel by matching its variable name with the String parameter that it received.

When I try to join two strings when assigning a value to a variable, I get the following errors: "String" does not convert to "Int", and "String" does not convert to "UILabel".

Maybe I'll do it all wrong.

import UIKit

class ViewController: UIViewController {

    // Setup variables
    var appleCounter = 0, appleFarms = 1
    var orangeCounter = 0, orangeFarms = 1
    var grapeCounter = 0, grapeFarms = 1

    // Setup labels
    @IBOutlet weak var appleLabel: UILabel!
    @IBOutlet weak var orangeLabel: UILabel!
    @IBOutlet weak var grapeLabel: UILabel!

    // Function to update label
    func updateFruitLabel(fruitString: String) {

        let fruitCount: Int = (fruitString + "Counter") // error: 'String' is not convertible to 'Int'
        let fruitFarms: Int = (fruitString + "Farms") // error: 'String' is not convertible to 'Int'
        let fruitLabel: UILabel = (fruitString + "Label") // error: 'String' is not convertible to 'UILabel'

        fruitLabel.text = "\(fruitString)s: \(fruitCount), \(fruitString) farms: \(fruitFarms)"
    }

    // Setup buttons
    // Increment fruit count and call update label function
    @IBAction func appleTapped(sender: UIButton) {
        appleCounter++
        updateFruitLabel("apple")
    }

    @IBAction func orangeTapped(sender: UIButton) {
        orangeCounter++
        updateFruitLabel("orange")
    }

    @IBAction func grapeTapped(sender: UIButton) {
        grapeCounter++
        updateFruitLabel("grape")
    }


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
+4
2

Enums . , :

class ViewController: UIViewController {

    enum fruit {
        case apple
        case orange
        case grape
    }

    // Setup variables
    var appleCounter = 0, appleFarms = 1
    var orangeCounter = 0, orangeFarms = 1
    var grapeCounter = 0, grapeFarms = 1

    // Setup labels
    @IBOutlet weak var appleLabel: UILabel!
    @IBOutlet weak var orangeLabel: UILabel!
    @IBOutlet weak var grapeLabel: UILabel!

    // Function to update label
    func updateFruit(fruitSelected: fruit) {

        switch fruitSelected {
            case .apple: appleLabel.text = "\(++appleCounter)"
            case .orange: orangeLabel.text = "\(++orangeCounter)"
            case .grape: grapeLabel.text = "\(++grapeCounter)"
        }
    }

    // Setup buttons
    // Increment fruit count and call update label function
    @IBAction func appleTapped(sender: UIButton) {
        updateFruit(fruit.apple)
    }

    @IBAction func orangeTapped(sender: UIButton) {
        updateFruit(fruit.orange)
    }

    @IBAction func grapeTapped(sender: UIButton) {
       updateFruit(fruit.grape)
    }
}

:

class ViewController: UIViewController {

    // Setup variables
    var appleCounter = 0, appleFarms = 1
    var orangeCounter = 0, orangeFarms = 1
    var grapeCounter = 0, grapeFarms = 1

    // Setup labels
    @IBOutlet weak var appleLabel: UILabel!
    @IBOutlet weak var orangeLabel: UILabel!
    @IBOutlet weak var grapeLabel: UILabel!

    // Setup buttons
    // Increment fruit count and call update label function
    @IBAction func appleTapped(sender: UIButton) {
        appleLabel.text = "\(++appleCounter)"
    }

    @IBAction func orangeTapped(sender: UIButton) {
        orangeLabel.text = "\(++orangeCounter)"
    }

    @IBAction func grapeTapped(sender: UIButton) {
       grapeLabel.text = "\(++grapeCounter)"
    }
}
+1

NSDictionary, , :

@{
     @"apple":{@"counter":0, @"Farms":1, @"label":appleLabel}
     @"grape":{@"counter":0, @"Farms":1, @"label":grapeLabel}
     @"orange":{@"counter":0, @"Farms":1, @"label":orangeLabel}
 }

@ "apple" fruitDictionary [@ "label" ] fruitDictionary [@ "counter" ]...

0

All Articles