Быстрое построение, использование неразрешенного идентификатора

Я использовал пар для создания проекта. создайте файл swift, используя xcode.

структура, как это:

├── Sources
│   └──App
│   │   └── Controllers
│   │   └── Models
│   │   │   └── File.swift
│   └──Run
│       └── main.swift
└── Package.swift

с main.swift

let config = try Config()
try config.setup()
let drop = try Droplet(config)
try drop.setup()
File.test()
try drop.run()

с File.swift

class File {

    class func test() -> Void{
        print("--\(self)--");
    }
}

вышеуказанный код XCode может работать нормально. но с помощью команды swift build чтобы получить ошибку.

журнал:

Compile Swift Module 'App' (6 sources)
Compile Swift Module 'Run' (1 sources)
/Users/xxx/Documents/testServer/Sources/Run/main.swift:25:1: error: use of 
unresolved identifier 'File'
File.test()
^~~~
CoreServices.cFile:1:12: note: did you mean 'cFile'?
public var cFile: OSType { get }
           ^
<unknown>:0: error: build had 1 command failures
error: exit(1):  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool -f /Users/xxx/Documents/testServer/.build/debug.yamlhere

2 ответа

Ваш main.swift находится в модуле Run, в то время как File находится в модуле App, Чтобы вызвать метод класса из другого модуля, вы должны выполнить следующее:

  1. Сделать класс (File) public
  2. Сделай метод (test) public
  3. Импортировать модуль в файл вызывающего метода - добавить import App в main.swift

Вероятно, происходит то, что ваш класс File находится в целевом приложении, а ваш Main находится в цели "Run", поэтому один не может видеть другого.

Что вам нужно сделать, это добавить строку File.test() в Droplet+setup.swift подать setup() функция, которая может быть в вашем проекте, расположенной над целью "App".

Что-то вроде этого:

@_exported import Vapor

extension Droplet {
    public func setup() throws {
        try setupRoutes()
        // ADD YOUR CLASS CALL OVER HERE
        File.test()

    }

}
Другие вопросы по тегам