2015-01-27 8 views
25

Qui è la mia classe personalizzata ... non so se mi manca qualche cosa in esso ...Come dichiarare correttamente la matrice di oggetti personalizzati in 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 
    } 
} 

sto cercando di creare un'istanza di qui ...

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 

I didn' t includere il resto della classe ViewController, perché non pensavo fosse necessario.

L'errore si verifica quando si tenta di assegnare un valore a base [0] .brand

Apprezzare il vostro aiuto in anticipo!

+0

Grazie a tutti per il vostro aiuto. Per chiarire, non stavo cercando di usare array 2D, quindi l'ho risolto. Tuttavia, anche dopo aver creato un nuovo oggetto di tipo BaseMakeUp, quando provo ad aggiungerlo, ottengo ancora l'errore "dichiarazione prevista". Credo che l'errore sia effettivamente con la mia dichiarazione dell'array perché quando provo a digitare di nuovo il fondotinta, Xcode non completa automaticamente o cambia il colore della parola come al solito. Non sono sicuro di cosa manca. – jbd36

risposta

0

è necessario istanziare l'oggetto classe

esempio:

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

Hai un paio di cose in corso qui:

  1. si sta perdendo alcune convenzioni di denominazione. I nomi delle classi devono essere in maiuscolo (baseMakeUp deve essere BaseMakeUp).
  2. Le classi vars dovrebbero essere minuscole (image, brand, color, rating). Anche brand & color nel metodo init.
  3. Si intende che l'array sia multidimensionale? Se si desidera solo una serie regolare, mi piacerebbe andare con qualcosa di simile:

    var foundation = [BaseMakeup]? 
    
  4. Come l'altra risposta, dice, è anche bisogno di istanze di oggetti BaseMakeup utilizzando il metodo init:

    let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red") 
    
  5. dopo di che, è possibile aggiungere oggetti BaseMakeup per l'array come questo:

    foundation?.append(aBaseMakeup) 
    

Hopeful sto comprendendo quello che stai cercando di realizzare.

37

In primo luogo, assumerò che non volevi array 2D. Se lo hai fatto, risponderò alla tua domanda da quella prospettiva qui sotto.

var foundation = [baseMakeUp]() 

Crea un array vuoto di baseMakeUp chiamato fondazione. Non è possibile utilizzare l'indice per aggiungere elementi a un array, è possibile utilizzarlo solo per modificare elementi esistenti. Dato che l'array è vuoto, aggiungi gli elementi con append.

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

Dal momento che non si dispone di un inizializzatore baseMakeUp che permette di passare un voto che il rating di elemento è 0.Tuttavia dal momento che aggiunti al vostro allineamento è ora possibile utilizzare subscripting per cambiare è Voto variabile in questo modo:

foundation[0].Rating = 3 

Se si intendeva per gli array 2d.

var foundation = [[baseMakeUp]]() 

Per creare la matrice

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

La prima riga aggiunge un array vuoto nell'array livello superiore. La seconda riga aggiunge un baseMakeUp alla matrice aggiunta nella prima riga. La terza riga utilizza l'indice per modificare la valutazione del primo elemento nel primo array dell'array 2d.

Speriamo che questo aiuti con il tuo problema.

Inoltre

Stavo per aggiungere punti 1 e 2 da jday001s risposta qui, ma si dovrebbe verificare la loro risposta pure.

Modifica

Ho appena realizzato che si sta cercando di aggiungere elementi al tuo array nel campo di applicazione sbagliata.

Dovrete spostare il

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

all'interno di una funzione e chiamare da soli, oppure inserirli in qualcosa di simile a viewDidLoad

esempio:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var foundation = [baseMakeUp]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

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

Speriamo che sia utile.

+0

Ho aggiornato la mia risposta. Spero di essere abbastanza chiaro. – Nightly

+0

Sì, è stato tutto il tempo, ero nella portata sbagliata a provare molte cose! Grazie ancora per il tuo aiuto, spero di trasmetterlo! – jbd36

+0

Ma quando ho bisogno di accedere alla matrice di base ora, si otterrebbe come - BaseMakeup (Marchio: "Qualcosa", colore: "Qualcosa"). Come faccio a ottenerlo come un risultato semplice come {Brand: "SOmething", colore: "Qualcosa"}? –