Подтвердить что ты не робот

Как правильно объявить массив пользовательских объектов в Swift?

Вот мой пользовательский класс... не уверен, что в нем ничего нет...

import UIKit

class baseMakeUp {
    var Image = UIImage()
    var Brand: String
    var Color: String
    var Rating: Int = 0

    init (Brand: String, Color: String) {
        self.Brand = Brand
        self.Color = Color
    }
}

Я пытаюсь создать здесь экземпляр...

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    let cellIdentifier = "cellIdentifier"

    var foundation: [[baseMakeUp]]
    var blush: [[baseMakeUp]]
    var eyes: [[baseMakeUp]]
    var lips: [[baseMakeUp]]
    var nails: [[baseMakeUp]]

    // put some test data in makeup arrays here...
    foundation[0].Brand = "Revlon"     -------------> "Expected declaration" error.
    foundation[0].Color = "Red"
    foundation[0].Rating = 3
    foundation[1].Brand = "MAC"
    foundation[1].Color = "Blue"
    foundation[1].Rating = 4

Я не включил остальную часть класса ViewController, потому что я не думал, что это необходимо.

Ошибка возникает, когда я пытаюсь присвоить значение основанию [0].Brand

Оцените свою помощь заранее!

4b9b3361

Ответ 1

Во-первых, я собираюсь предположить, что вам не нужны 2d-массивы. Если вы это сделаете, я отвечу на ваш вопрос с этой точки зрения ниже.

    var foundation = [baseMakeUp]()

Создает пустой массив baseMakeUp, называемый основой. Вы не можете использовать subscript для добавления элементов в массив, вы можете использовать его только для изменения существующих элементов. Поскольку ваш массив пуст, вы добавляете элементы с добавлением.

   foundation.append(baseMakeUp(Brand: "Brand", Color: "Color"))

Поскольку у вас нет инициализатора baseMakeUp, который позволяет вам оценивать рейтинг элемента равным 0. Однако, поскольку вы добавили его в свой массив, теперь вы можете использовать подписи для изменения его переменной рейтинга следующим образом:

foundation[0].Rating = 3

Если вы намеревались использовать 2d-массивы.

    var foundation = [[baseMakeUp]]()

Чтобы создать массив

    foundation.append([])
    foundation[0].append(baseMakeUp(Brand: "Brand", Color: "Color"))
    foundation[0][0].Rating = 3

Первая строка добавляет пустой массив в ваш массив верхнего уровня. Вторая строка добавляет baseMakeUp к массиву, добавленному в первую строку. Третья строка использует индексирование для изменения рейтинга первого элемента в первом массиве вашего 2d-массива.

Надеюсь, это поможет с вашей проблемой.

Дополнительно

Я собирался добавить пункты 1 и 2 из jday001s здесь, но вы также должны проверить их ответ.

Edit

Я просто понял, что вы пытаетесь добавить элементы в свои массивы в неправильной области.

Вам нужно будет переместить

foundation.append(baseMakeUp(Brand: "Brand", Color: "Color")

внутри функции и назовите ее самостоятельно или поместите их в нечто вроде viewDidLoad

например:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var foundation = [baseMakeUp]()

    override func viewDidLoad() {
        super.viewDidLoad()

        foundation.append(baseMakeUp(Brand: "Brand", Color: "Color")
        foundation[0].Rating = 3
    }
}

Надеюсь, что это полезно.

Ответ 2

У вас здесь есть несколько вещей:

  • Вам не хватает некоторых соглашений об именах. Имена классов должны быть заглавные (baseMakeUp должно быть baseMakeUp).
  • Классы классов должны быть строчными (image, brand, color, rating). Также brand и color в методе init.
  • Предназначен ли для вашего массива foundation многомерным? Если вы просто хотите регулярный массив, я бы пошел с чем-то вроде:

    var foundation = [BaseMakeup]?
    
  • Как говорится в другом ответе, вам также необходимо создать объекты BaseMakeup с помощью метода init:

    let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red")
    
  • После этого вы можете добавить объекты BaseMakeup в свой массив следующим образом:

    foundation?.append(aBaseMakeup)
    

Надеюсь, я понимаю, чего вы пытаетесь выполнить.

Ответ 3

Вам нужно создать экземпляр объекта класса

Пример:

var foundation = baseMakeUp(Brand: "Some Brand", Color: "Red")