我不熟悉编码,对于我的第一个应用程序,我正在尝试创建一个结构,该结构存储字符串数组,这些字符串数组可以加载到我的UIButton Array中以设置为各自的标题。我创建了一个名为ToDo的结构,以尝试遵循应用程序中的MVC结构。我试图在名为labelArray的结构中创建一个字符串数组,并创建一个函数,该函数在名为getLabelArray的视图控制器中调用该函数时会返回该数组中项目的字符串,我希望将索引计数的整数接受到数组中UI按钮。我要实现的目标是在视图加载之前为数组中的按钮设置占位符标题。欢迎任何帮助!我已经在代码中附加了注释。谢谢!
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]
}
以下内容正确设置了UIButton的标题。
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)
}