web-dev-qa-db-fra.com

'Les expressions ne sont pas autorisées au niveau supérieur' si le module n'est pas main.swift

Y at-il quelque chose de spécial avec un fichier main.Swift?

J'ai créé un projet basé sur la ligne de commande dans XCode. Si je mets une expression println("Hello, World!"); dans un nouveau fichier Swift dit test.Swift, le message d'erreur suivant s'affiche: Expressions are not allowed at the top level

Cependant, cette expression est placée au premier niveau dans le fichier main.Swift créé par XCode dans le nouveau projet. Aucune exception de ce type n'est signalée par XCode.

22
Anthony Kong

Apparemment oui, selon cette réponseCependant, il n'y a pas de citations concernant ce comportement.

Update Ceci est documenté sur le blog de Swift :

... plus tôt, nous avions dit que le code de niveau supérieur n’était pas autorisé dans la plupart des fichiers source de votre application. L’exception est un fichier spécial appelé «main.Swift», qui se comporte presque comme un fichier de terrain de jeu, mais qui est construit avec le code source de votre application. Le fichier «main.Swift» peut contenir du code de niveau supérieur. Les règles dépendantes de l'ordre s'appliquent également. En effet, la première ligne de code à exécuter dans «main.Swift» est définie implicitement comme le point d'entrée principal du programme. Cela permet au programme Swift minimal d'être une seule ligne - tant que cette ligne est dans «main.Swift».

13
Manav

Si vous avez plusieurs fichiers Swift et que vous construisez un projet en ligne de commande, assurez-vous que vous avezmain.Swiftdisponible, qui servira de point d'entrée à votre application. De plus,main.Swiftdevrait être dans votre module sinon vous obtiendrez l'erreur suivante:

error: the package has an unsupported layout, unexpected source file(s) found: /Users/.../../Hello/main.Swift

correctif: déplacer le (s) fichier (s) à l'intérieur d'un module

0
manismku

Je me demande si c'est vraiment main.Swift ou peut-être vous avez deux fichiers. Voici une démo simple.

Dossier: Swift-testy
Fichiers1: main.Swift
Fichiers2: ex1.Swift 

Le contenu est:

main.Swift

import Foundation

println("Hello, World!")

let chaulky = Dog()

chaulky.bark()

ex1.Swift

import Foundation

class Dog {
    func bark() {
        println("woof") // This is a comment
    }
}

Sortie lorsque je clique sur le bouton Exécuter

Bonjour tout le monde!

0
netskink