ios - 在 Swift 中,如何使用传递给函数的 String 参数来引用 UILabel 变量?

标签 ios string swift int uilabel

在 Swift 中,有没有一种方法可以通过引用传递给函数的字符串参数来分配变量?

我的目标是编写一个通用函数,允许我根据 UILabel 的字符串参数更新其文本。具体来说,该函数应通过将其变量名与其接收到的字符串参数进行匹配来找到 UILabel。

当我在分配变量值时尝试连接两个字符串时,出现以下错误:“String”不可转换为“Int”且“String”不可转换为“UILabel”。

也许我做错了。

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()
    }
}

最佳答案

看看枚举和开关。下面是一些适合您的代码:

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)"
    }
}

关于ios - 在 Swift 中,如何使用传递给函数的 String 参数来引用 UILabel 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385827/

相关文章:

ios - 使用 Swift 将照片上传到网络服务

ios - 在启用垂直分页的 UIScrollView 中垂直滚动

ios - 无法在项目导航器中打开 xib

c - 如何使用指针正确地将字符串输入存储到字符数组中?

java - 如何让我的代码也检查长度为 0 的字符串?

ios - Swift - 应用程序跟踪透明度 - 由于 ‘Allow Apps to Request to Track’ 变灰而没有显示弹出窗口

ios - 在模拟器上运行时为"No installed provisioning profiles match the installed iOS signing identities."

ios - 如何使用Objective-C更改多种UIButton颜色

c - 将输入位串分成两半的优雅方法是什么

ios - 有没有办法使用用户默认值来更改我的所有 IOS 应用程序页面的背景颜色?