在 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/