"Выражения не допускаются на верхнем уровне", если модуль не является основным .swift
Есть ли что-нибудь особенное с файлом main.swift
?
Я создал проект на основе командной строки в XCode. Если я добавлю выражение println("Hello, World!");
в новый swift файл, скажем test.swift, я получу сообщение об ошибке: Expressions are not allowed at the top level
Однако это выражение размещается на верхнем уровне в main.swift, который создается XCode в новом проекте. Никакое исключение не помечено XCode.
Ответы
Ответ 1
По-видимому, да, согласно этому answer. Однако нет никаких ссылок на это поведение.
Обновление
Это описано в блоге Swift:
... ранее мы сказали, что код верхнего уровня не разрешен в большинстве исходных файлов ваших приложений. Исключением является специальный файл с именем "main.swift" , который ведет себя подобно файлу детской площадки, но построен с исходным кодом вашего приложения. Файл main.swift может содержать код верхнего уровня, а также правила, зависящие от порядка. По сути, первая строка кода для запуска в "main.swift" неявно определяется как основная точка входа для программы. Это позволяет минимальной программе Swift быть одной строкой - пока эта строка находится в "main.swift" .
Ответ 2
Интересно, действительно ли это main.swift или, возможно, у вас есть два файла. Вот простая демонстрация.
Папка: swift-testy
Файлы1: main.swift
Файлы2: ex1.swift
Содержание:
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
}
}
Вывод при нажатии кнопки запуска
Привет, мир!
гав
Ответ 3
Если у вас несколько быстрых файлов, и вы строите проект командной строки, убедитесь, что у вас есть main.swift, который будет действовать как точка входа в ваше приложение. Кроме того, main.swift должен находиться внутри вашего модуля, вы получите следующую ошибку:
error: the package has an unsupported layout, unexpected source file(s) found: /Users/.../../Hello/main.swift
fix: переместите файл внутри модуля