ios - array - swift 4 sorted
¿Cómo declarar correctamente la matriz de objetos personalizados en Swift? (4)
Aquí está mi clase personalizada ... no estoy seguro si me falta algo ...
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 {
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
No incluí el resto de la clase ViewController, porque no pensé que fuera necesario.
El error se produce cuando intento asignar un valor a foundation [0] .Brand
¡Aprecio su ayuda de antemano!
Necesita instanciar su objeto de clase
ejemplo:
var arrayName:Array<yourclassname> = Array()
print("/(yourclaseename[0].name)")
Primero crea una clase personalizada ...
var foundation = baseMakeUp(Brand: "Some Brand", Color: "Red")
El uso puede usar esta clase en viewcontroller por las siguientes líneas
import Foundation
class ClassName{
var id: Int?
var name: String?
var category_name: String?
var price: Double?
init(json: JSON) {
self.id = json["id"].int
self.name = json["name"].string
self.category_name = json["category_name"].string
self.price = json["price"].double
}
}
Primero, voy a asumir que no querías arreglos en 2D. Si lo hiciste, contestaré tu pregunta desde esa perspectiva a continuación.
var foundation = [baseMakeUp]()
Crea una matriz vacía de baseMakeUp llamada fundación. No puede usar subíndices para agregar elementos a una matriz, solo puede usarlo para cambiar elementos existentes. Como la matriz está vacía, agregue elementos al agregar.
foundation.append(baseMakeUp(Brand: "Brand", Color: "Color"))
Ya que no tiene un inicializador baseMakeUp que le permita pasar una calificación, la calificación de ese elemento es 0. Sin embargo, como la agregó a su matriz, ahora puede usar suscripciones para cambiar su variable de clasificación de esta manera:
foundation[0].Rating = 3
Si es la intención de 2d matrices.
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 un baseMakeUp a la matriz agregada en la primera línea. La tercera línea usa subíndices para cambiar la Clasificación del primer elemento en la primera matriz de su matriz 2d.
Esperemos que eso ayude con su problema.
Adicionalmente
Iba a agregar los puntos 1 y 2 de la respuesta de jday001 aquí, pero también deberías revisar su respuesta.
Editar
Acabo de darme cuenta de que está intentando agregar elementos a sus arreglos en el ámbito incorrecto.
Tendrás que mover tu
foundation.append(baseMakeUp(Brand: "Brand", Color: "Color")
dentro de una función y llámelo usted mismo o colóquelos dentro de algo 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
}
}
Esperemos que sea útil.
Usted tiene algunas cosas que suceden aquí:
- Te faltan algunas convenciones de nomenclatura. Los nombres de clase deben estar en mayúsculas (
baseMakeUp
debe serBaseMakeUp
). - Las variables de clase deben estar en minúsculas (
image
,brand
,color
,rating
). Tambiénbrand
ycolor
en el método init. ¿Pretendes que tu matriz de
foundation
sea multidimensional? Si solo quieres una matriz regular, iría con algo como:var foundation = [BaseMakeup]?
Como dice la otra respuesta, también necesita crear una instancia de los objetos de BaseMakeup usando su método init:
let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red")
Después de eso, puedes agregar objetos BaseMakeup a tu matriz de esta manera:
foundation?.append(aBaseMakeup)
Con suerte, estoy entendiendo lo que estás tratando de lograr.