1

我用蒸汽来建立一个项目。使用 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
4

2 回答 2

3

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

  1. 制作类 ( File)public
  2. 制作方法 ( test)public
  3. 在调用方法的文件中导入模块 - 添加import Appmain.swift
于 2017-08-30T05:29:03.490 回答
1

可能正在发生的事情是您的班级File在目标“应用程序”中,而您的班级Main在目标“运行”中,所以一个人看不到另一个人。

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

像这样的一些事情:

@_exported import Vapor

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

    }

}
于 2017-08-29T12:47:35.907 回答