Быстрое построение, использование неразрешенного идентификатора
Я использовал пар для создания проекта. создайте файл 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
, Чтобы вызвать метод класса из другого модуля, вы должны выполнить следующее:
- Сделать класс (
File
)public
- Сделай метод (
test
)public
- Импортировать модуль в файл вызывающего метода - добавить
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()
}
}