我是编码新手,对于我的第一个应用程序,我正在尝试创建一个结构,该结构存储字符串数组,这些字符串可以加载到我的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)
}