Cómo declarar correctamente la matriz de objects personalizados en Swift?

Aquí está mi class personalizada … no estoy seguro de si me falta algo en él …

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 } } 

Estoy tratando de instanciar aquí …

 import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { requinetworking 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 

No incluí el rest de la class ViewController, porque no creía que fuera necesario.

El error ocurre cuando bash asignar un valor a la base [0]. Marca

Aprecie su ayuda de antemano!

En primer lugar, voy a asumir que no quería arrays 2d. Si lo hiciste, responderé tu pregunta desde esa perspectiva a continuación.

  var foundation = [baseMakeUp]() 

Crea una matriz vacía de baseMakeUp llamada foundation. No puede usar suscripciones para agregar elementos a una matriz, solo puede usarla para cambiar elementos existentes. Como su matriz está vacía, agregue elementos con anexar.

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

Dado que no tiene un inicializador baseMakeUp que le permita pasar una calificación, la calificación de ese elemento es 0. Sin embargo, desde que lo agregó a su matriz, ahora puede utilizar las suscripciones para cambiar su variable de Calificación de la siguiente manera:

 foundation[0].Rating = 3 

Si tenía la intención de arrays 2d.

  var foundation = [[baseMakeUp]]() 

Para crear la matriz

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

La primera línea agrega una matriz vacía a su matriz de nivel superior. La segunda línea agrega una baseMakeUp a la matriz agregada en la primera línea. La tercera línea usa suscripciones para cambiar la Calificación del primer elemento en la primera matriz de su matriz 2d.

Espero que eso ayude con su problema.

Adicionalmente

Iba a agregar los puntos 1 y 2 de la respuesta de jday001s aquí, pero también debería revisar su respuesta.

Editar

Acabo de darme count de que estás tratando de agregar elementos a tus arrays en un scope incorrecto.

Tendrás que mover tu

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

dentro de una function y llámalo tú mismo o colócalos dentro de algo así como viewDidLoad

p.ej:

 class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { var foundation = [baseMakeUp]() override func viewDidLoad() { super.viewDidLoad() foundation.append(baseMakeUp(Brand: "Brand", Color: "Color") foundation[0].Rating = 3 } } 

Espero que eso sea útil.

Aquí tienes algunas cosas:

  1. Te estás perdiendo algunas convenciones de nomenclatura. Los nombres de las classs deben ser mayúsculas ( baseMakeUp debe ser BaseMakeUp ).
  2. Las vars de class deben ser minúsculas ( image , brand , color , rating ). También brand y color en el método init.
  3. ¿Tiene la intención de que su set de foundation sea ​​multidimensional? Si solo quieres una matriz regular, iría con algo como:

     var foundation = [BaseMakeup]? 
  4. Como dice la otra respuesta, también debe instanciar objects BaseMakeup utilizando su método init:

     let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red") 
  5. Después de eso, puede agregar objects BaseMakeup a su matriz de esta forma:

     foundation?.append(aBaseMakeup) 

Espero que entienda lo que estás tratando de lograr.

Necesitas crear una instancia de tu object de class.

ejemplo:

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