在 Swift 中创建数组并使用标签中的数据

问题描述

大约十年前我有一个应用程序,但我没有更新。我最近找到了代码,并试图用 Swift 将它带入 Xcode。我的故事板状态良好,并且开始编写可运行的代码,但我无法成功地将旧方法翻译成新语言。

该应用程序将具有需要填充数组的编号 UIButton。标签将按照用户作为 IBAction 输入的顺序收集 Array 项目。标签一 (Aa) 将需要包括索引 0 处的数组项,索引 1 处的标签二 (Ab) 等

据我所知,我遇到了麻烦,让标签名称进入数组并提取该信息。我知道这是一个简单的问题,但自从我编码并希望让我的应用再次运行已经 7 年了!

代码:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var rowAsEntered: UILabel!

@IBOutlet weak var Aa: UILabel!

  var primeRow = [Int]()

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

func clearAll()
{
    rowAsEntered.text = ""
    primeRow.removeAll()
    Aa.text = ""
    Ab.text = ""
    Ac.text = ""
    Ad.text = ""
    Ae.text = ""
    Af.text = ""
    Ag.text = ""
    Ah.text = ""
    Ai.text = ""
    Aj.text = ""
    Ak.text = ""
    Al.text = ""

 
}
@IBAction func backTap(_ sender: Any) {
    if(!row.isEmpty)
    
    {
        primeRow.removeLast()
    }
}

@IBAction func clearTap(_ sender: Any) {
    clearAll() }


func addToPrimeRow(value: Array<Int>){
    
    Aa.text = primeRow [0]
    Ab.text = primeRow [1]
    Ac.text = primeRow [2]
    Ad.text = primeRow [3]
    Ae.text = primeRow [4]
    Af.text = primeRow [5]
    Ag.text = primeRow [6]
    Ah.text = primeRow [7]
    Ai.text = primeRow [8]
    Aj.text = primeRow [9]
    Ak.text = primeRow [10]
    Al.text = primeRow [11]    
 
}



@IBAction func zeroTap(_ sender: Any){
    addToPrimeRow.append(0)
    
}

@IBAction func oneTap(_ sender: Any) {
    addToPrimeRow.append(1)
}

@IBAction func twoTap(_ sender: Any) {
    addToPrimeRow.append(2)}

@IBAction func threeTap(_ sender: Any) {
    addToPrimeRow.append(3)
}

@IBAction func fourTap(_ sender: Any) {
    addToPrimeRow.append(4)
}

@IBAction func fiveTap(_ sender: Any) {
    addToPrimeRow.append(5)
}

@IBAction func sixTap(_ sender: Any) {
    addToPrimeRow.append(6)
}

@IBAction func sevenTap(_ sender: Any) {
    addToPrimeRow.append(7)
}

@IBAction func eightTap(_ sender: Any) {
    addToPrimeRow.append(8)
}

@IBAction func nineTap(_ sender: Any) {
    addToPrimeRow.append(9)
}

@IBAction func tenTap(_ sender: Any) {
    addToPrimeRow.append(10)
}

@IBAction func elevenTap(_ sender: Any) {
    addToPrimeRow.append(11)
}

}

解决方法

  1. 我建议您使用一系列按钮/标签。然后,您可以使用带有 switch 语句的单数 func tapped(_ sender: Any) 来根据按钮的索引处理操作。 (在此处查看瓦迪安对这篇文章的回答:Array of UIButtons

  2. addToPrimeRow.append() 对您不起作用,因为 addToPrimeRow 被声明为函数。 append 用于数组数据结构。

  3. 您试图将一个 Int 分配给需要字符串的 label.text。这是一个简单的解决方法,只需将其投射 String(Int)

有了上面的,它看起来像这样:

@IBOutlet var buttons: [UIButton]!
@IBOutlet var labels: [UILabel]!

@IBAction func tappedButton(_ sender: UIButton) {
    guard let index = boxes.index(of: sender) else { return }
    updateLabel(at: index,to: String(index))
}

// added a second param newText to updateLabel in case you want
// to update the label text to something other than the index
// if you don't want to do that,you can just cast the index
// to a string doing String(index) inside of updateLabel and remove the second param
func updateLabel(at index: Int,to newText: String) {
  guard let updatingLabel = labels[index] else { return }
  updatingLabel.text = newText
}

更新

根据评论中的其他上下文,我修改了原始答案中的一些代码。

期望的行为:点击按钮将按照点击的顺序使用点击的按钮值填充标签

@IBOutlet var buttons: [UIButton]!
@IBOutlet var labels: [UILabel]!

@IBAction func tappedButton(_ sender: UIButton) {
  guard let index = boxes.index(of: sender) else { return }
  updateNextLabel(withValue: index)
}

func updateNextLabel(withValue value: Int) {
  // find the next label that doesn't have text yet
  let nextLabel = labels.first(where: {$0.text.isEmpty})
  // you need to cast the int value to a string to assign it to the label
  nextLabel.text = String(value)
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...