如何将数组从一个结构中的字符串数组传递到类Swift中按钮数组中的标题



我是编码新手,对于我的第一个应用程序,我正在尝试创建一个结构,该结构存储字符串数组,这些字符串可以加载到我的UIButton数组中,设置为它们的单独标题。我创建了一个名为ToDo的结构,试图在我的应用程序中遵循MVC结构。我试图在我的结构中创建一个名为labelArray的字符串数组,以及一个函数,当在我的视图控制器getLabelArray中调用数组中的项时,该函数将返回该项的字符串。我想要实现的目标是在加载视图之前,从数组中为我的按钮设置占位符标题。欢迎任何帮助!我已经附上了我的代码和评论。谢谢

import UIKit
class ViewController: UIViewController {
//Instantiates ToDo Class Object
var labelArray = ToDo()
//Main Score Label
@IBOutlet weak var scoreLabel: UILabel!
//Array of TodoItems To Be Filled By ToDo Class
@IBOutlet var toDoItemArray: [UIButton]!
//Array of Scores To Be Filled By ToDo Class
@IBOutlet var scoreArray: [UILabel]!
override func viewDidLoad() {
super.viewDidLoad()
/* For every item in toDoItemArray will set text of each UIButton label to a 
string in labelArray from ToDo struct */   
for i in 0...toDoItemArray.count {
func updateTextInArray(){
toDoItemArray[i].setTitle("(labelArray.getLabelArray(index: i))", for: UIControl.State.normal)
}
}
}
}


// ToDoStruct
import Foundation
struct ToDo {
var task1 = "Cooking"
var task2 = "Cleaning"
var task3 = "Walking Dog"
lazy var labelArray = [task1,task2,task3]
mutating func getLabelArray (index: Int) -> String {
return labelArray[index]
}

下面正确设置了UI按钮的标题。

override func viewDidLoad() {
super.viewDidLoad()
for i in 0..<toDoItemArray.count {
toDoItemArray[i].setTitle(
"(labelArray.getLabelArray(index: i))",
for: .normal
)
}
}

但是,您确实不需要不必要的getLabelArray。如果希望labelArray为只读属性,请使用private(set)关键字:

private(set) lazy var labelArray = [task1, task2, task3]

此外,通过重命名var toDo = ToDo(),您可以整理for循环:

for (i, label) in toDo.labelArray.enumerated() {
toDoItemArray[i].setTitle("(label)", for: .normal)
}

最新更新