2017-08-29 181 views
0

我使用vapor來構建項目。使用xcode創建一個swift文件。swift build使用未解決的標識符

結構是這樣的:

├── 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 

回答

0

也許正在發生的事情是,你File類是目標「應用」,而你的Main是目標「運行」,因此不能看到其他。

您需要做的是通過setup()函數將File.test()行添加到Droplet+setup.swift文件中,該函數可能位於「應用」目標上的項目中。

有些事情是這樣的:

@_exported import Vapor 

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

    } 

} 
+0

但我該如何添加類文件到'運行'源裏面呢? –

3

main.swift是在模塊Run,而File在模塊App。調用類的方法,從另一個模塊,必須執行以下操作:

  1. 使類(Filepublic
  2. 製作方法(testpublic
  3. 導入文件中的模塊的呼叫方法 - 添加import Appmain.swift
+0

謝謝。它開始工作。但我如何將類文件添加到其中的'運行'源? –

+0

要在模塊「Run」的源文件中使用類「File」 - 只需將「import App」添加到每個源文件中,即可使用「File」類。 –

+0

如何做到這一點。你可以給我一個例子嗎?鏈接? –

相關問題