快速构建使用未解析的标识符

时间:2017-08-29 05:39:56

标签: vapor swift-package-manager spm

我使用vapor来构建项目。使用xcode创建一个swift文件。

像这样的结构:

├── 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 个答案:

答案 0 :(得分:3)

您的main.swift位于模块Run中,而File位于模块App中。要从另一个模块调用类的方法,您必须执行以下操作:

  1. 制作课程(Filepublic
  2. 制作方法(testpublic
  3. 在调用方法的文件中导入模块 - 将import App添加到main.swift

答案 1 :(得分:0)

可能发生的情况是,您的班级File位于目标“应用”中,而您的Main位于目标“运行”中,因此无法看到另一个。

您需要做的是将File.test()行添加到Droplet+setup.swiftsetup()文件中,该文件可能位于“应用”目标上的项目中。

有些事情是这样的:

@_exported import Vapor

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

    }

}