Expressions are not allowed at the top level

Bonsoir

J’ai un petit problème et je ne vois pas comment le résoudre.J’ai crée une struct avec plusieurs propriétés.
J’ai ensuite créé un tableau dans lequel j’ai ajouter des nouveaux objets.Le problème est que j’ai le message d’erreur : Expressions are not allowed at the top level.
Est ce que quelqu’un aurait une idée?

Code :

import Foundation

import CardSlider

struct Entree : CardSliderItem {

var image: UIImage

var rating: Int?

var title: String

var subtitle: String?

var description: String?

}

var test = Entree

test.append(Entree(image: UIImage(named: « oeufCocotte »)!, rating: nil , title: « Oeuf cocotte parmesan », subtitle: « Entree », description: « Un bel oeuf »))

test.append(Entree(image: UIImage(named: « potage »)!, rating: nil , title: « Potage du marché », subtitle: « Entree », description: « Un beau potage »))

test.append(Entree(image: UIImage(named: « terrine »)!, rating: nil , title: « Terrine de campagne maison », subtitle: « Entree », description: « Une belle terrine »))

test.append(Entree(image: UIImage(named: « Cassolette »)!, rating: nil , title: « Cassolette d’escargot et champignons », subtitle: « Entree », description: « Une belle cassolette »))

test.append(Entree(image: UIImage(named: « camembert »)!, rating: nil , title: « Demi camembert rôti au miel et jambon fumé », subtitle: « Entree », description: « Un beau camembert »))

Oui, met ton code dans une fonction ou une classe, plutôt que de le taper dans le vide. Je parie que tu as appris tes premières lignes de code avec Playground, qui donne de très mauvaises habitudes, par la suite !

Effectivement, chaque code doit être exécuté dans un contexte :slight_smile:

C’est d’ailleurs pour cette raison que je n’ai pas utilisé les Playgrounds dans le cours sur les bases de la programmation : https://www.purplegiraffe.fr/p/apprendre-a-programmer-en-swift

Bonjour

Merci beaucoup pour ces réponses rapides et pardon pour les miennes qui sont tardives.

Effectivement,j’ai appris mes premières lignes de codes avec Playground!!!

J’ai rectifié mon code selon vos conseils.J’ai eu le nez dans le guidon pendant deux jours.

Mon idée est de créer une TableView et un Controller (en utilisant le pod CardSlider) qui permet de donner le détail de chaque Cell de cette TableView.

Code du TableViewController:

class MainTableViewController : UITableViewController {
func callSegueFromCell(myData dataobject: AnyObject) {
self.performSegue(withIdentifier: « ShowBurgerDetails », sender: dataobject)
}
var productLines : [ProductLine] = ProductLine.getProductLines()
override func viewDidLoad() {
super.viewDidLoad()
title = « Test »

    tableView.estimatedRowHeight = tableView.rowHeight
    tableView.rowHeight = UITableView.automaticDimension

}
override func numberOfSections(in tableView: UITableView) -> Int {
    return productLines.count
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    let productLine = productLines[section]
    return productLine.name
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return productLines[section].products.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "firstCell", for: indexPath) as!ProductTableViewCell
    
    let productLine = productLines[indexPath.section]
    let products = productLine.products
    cell.product = products[indexPath.row]
    cell.product = productLines[indexPath.section].products[indexPath.row]
  
    return cell
}
var selectedProduct: Product?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let productLine = productLines[indexPath.section]
    let product = productLine.products[indexPath.row]
    selectedProduct = product
    performSegue(withIdentifier: "ShowBurgerDetails", sender: nil)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ShowBurgerDetails" {
        _ = segue.destination as! ViewController
                }
    
    
}

}

J’ai crée un model pour la TableView pour ce faire.J’ai crée des objets que j’ai mis dans un tableau.Pour la TableView,ça marche nickel.

Code

import Foundation
import UIKit

class ProductLine {

var name : String
var products : [Product]
init(named : String,includeProducts : [Product]) {
    name = named
    products = includeProducts
}
class func getProductLines()-> [ProductLine]
{
    return [entrées(),plats(),salades(),planches(),menuEnfant(),burgers(),desserts()]
}
 private class func entrées() -> ProductLine {
       //   index (0) Entrees
       var products = [Product]()
       
       products.append(Product(imageName: "oeufCocotte", title: "Nos entrées"))
       
       return ProductLine(named: "Entrées", includeProducts: products)
   }
   
   //  index(1)
   
   private class func plats() -> ProductLine
   {
       var products = [Product]()
       
       products.append(Product(imageName: "risotto", title: "Nos plats"))

       return ProductLine(named: "Plats", includeProducts: products)
   }
   
   //  (2)
   
   private class func salades() -> ProductLine
   {
       var products = [Product]()
       
   
       products.append(Product(imageName: "cesar", title: "Nos salades"))
       
       
       return ProductLine(named: "Salades", includeProducts: products)
   }
   


   //  (3)
   private class func planches() -> ProductLine
   {
       var products = [Product]()
       
      products.append(Product(imageName: "plancheFromage", title: "Nos planches"))
    
      
       
       
       return ProductLine(named: "Planches", includeProducts: products)
   }
   
   //  (4)Menu enfants
   
   private class func menuEnfant() -> ProductLine
   {
       var products = [Product]()
       
       products.append(Product(imageName: "burgerEnfant", title: "Nos menus enfants"))
       
       
       return ProductLine(named: "Menu enfants", includeProducts: products)
   }


// (5) Burgers

 private class func burgers() -> ProductLine
      {
          var products = [Product]()
          
          products.append(Product(imageName: "Ococher", title: "Nos burgers"))
          
          
          return ProductLine(named: "Burgers", includeProducts: products)
      }

// (6) Dessert
private class func desserts() -> ProductLine
{
    var products = [Product]()
    
    products.append(Product(imageName: "mousseChocolat", title: "Nos desserts"))
    
    
    return ProductLine(named: "Dessert", includeProducts: products)
}

}

Par contre,j’ai utilisé la meme procédé pour mon controller.Je voudrais faire coïncider les deux tableaux pour faire en sorte que lorsque l’utilisateur sélectionne une Cell dans la TableView,il puisse afficher le detail de cette Cell.Pour l’instant,je sèche un peu

(Les photos sont bien sûr là pour le test :-))