Как передать массивы из строкового массива в одной структуре в заголовки в массиве кнопок в классе Swift - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в кодировании, и для моего первого приложения я пытаюсь создать структуру, в которой хранятся массивы строк, которые можно загрузить в мой массив 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]

    }

1 Ответ

0 голосов
/ 14 апреля 2020

Следующее правильно устанавливает заголовки кнопок UIB.

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 l oop:

for (i, label) in toDo.labelArray.enumerated() {
    toDoItemArray[i].setTitle("\(label)", for: .normal)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...