web-dev-qa-db-fra.com

Comment déclarer correctement un tableau d'objets personnalisés dans Swift?

Voici mon cours personnalisé ... je ne suis pas sûr qu'il me manque quelque chose ...

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

J'essaye d'instancier ici ...

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

Je n'ai pas inclus le reste de la classe ViewController, car je ne pensais pas que c'était nécessaire.

L'erreur se produit lorsque j'essaie d'attribuer une valeur à la fondation [0] .Brand

Appréciez votre aide d'avance!

35
jbd36

Premièrement, je vais supposer que vous ne vouliez pas de tableaux 2D. Si tel est le cas, je répondrai à votre question sous cet angle.

    var foundation = [baseMakeUp]()

Crée un tableau vide de baseMakeUp appelé fondation. Vous ne pouvez pas utiliser les indices pour ajouter des éléments à un tableau, vous pouvez uniquement l'utiliser pour modifier des éléments existants. Puisque votre tableau est vide, vous ajoutez des éléments avec append.

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

Comme vous n'avez pas d'initialiseur baseMakeUp qui vous permette de passer une note, la note de cet élément est 0. Cependant, puisque vous l'avez ajouté à votre tableau, vous pouvez maintenant utiliser l'indice pour changer sa variable Rating comme ceci:

foundation[0].Rating = 3

Si vous aviez l'intention de créer des tableaux 2D.

    var foundation = [[baseMakeUp]]()

Pour créer le tableau

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

La première ligne ajoute un tableau vide à votre tableau de niveau supérieur. La deuxième ligne ajoute un baseMakeUp au tableau ajouté à la première ligne. La troisième ligne utilise l’indice subscript pour modifier l’évaluation du premier élément du premier tableau de votre tableau 2D.

Espérons que cela aide avec votre problème.

De plus

J'allais ajouter les points 1 et 2 de la réponse de jday001, mais vous devriez également consulter leur réponse.

Éditer

Je viens de me rendre compte que vous essayez d'ajouter des éléments à vos tableaux dans le mauvais périmètre.

Vous devrez déplacer votre

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

dans une fonction et appelez-la vous-même ou placez-la à l'intérieur de quelque chose comme viewDidLoad

par exemple:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var foundation = [baseMakeUp]()

    override func viewDidLoad() {
        super.viewDidLoad()

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

J'espère que c'est utile.

44
Nightly

Vous avez quelques choses qui se passent ici:

  1. Il manque certaines conventions de nommage. Les noms de classe devraient être en majuscule (baseMakeUp devrait être BaseMakeUp).
  2. Les class vars doivent être en minuscule (image, brand, color, rating). Aussi brand & color dans la méthode init.
  3. Voulez-vous que votre tableau foundation soit multidimensionnel? Si vous voulez juste un tableau régulier, je choisirais quelque chose comme:

    var foundation = [BaseMakeup]?
    
  4. Comme le dit l'autre réponse, vous devez également instancier des objets BaseMakeup à l'aide de votre méthode init:

    let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red")
    
  5. Après cela, vous pouvez ajouter des objets BaseMakeup à votre tableau comme ceci:

    foundation?.append(aBaseMakeup)
    

J'espère comprendre ce que vous essayez d'accomplir.

8
jday

Créez d'abord une classe personnalisée ...

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
}

}

Use peut utiliser cette classe dans viewcontroller en suivant les lignes

var arrayName:Array<yourclassname> = Array()
print("/(yourclaseename[0].name)")
3
Tina Detroja

Vous devez instancier votre objet de classe

exemple:

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