2017-08-29 14 views
0

私はvaporを使ってプロジェクトをビルドしました。 xcodeを使用して素早くファイルを作成します。未解決の識別子の迅速なビルドの使用

このような構造:

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

File.swift

class File { 

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

上記コードのXcodeとmain.swift

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

では正常に実行することができます。コマンド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

おそらく何が起こっているのか、一方が他方を見ることはできませんのでごMainは、ターゲット「RUN」である間、あなたのクラスFileは、ターゲットのアプリケーション "であるということです。あなたがする必要がどのような

は、あなたのプロジェクトで「アプリケーション」のターゲット上に位置しているかもしれないことを、setup()機能上Droplet+setup.swiftファイルに行File.test()を追加することです。

このようないくつかの事:

@_exported import Vapor 

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

    } 

} 
+0

に追加しますが、クラスファイルを 'Run'ソースに追加するにはどうすればよいですか?ありがとう。 –

3

FileはモジュールAppしている間にあなたのmain.swiftは、モジュールRunです。

  1. メソッド(testpublic
  2. インポートファイル内のモジュールを作成したクラス(Filepublic
  3. を行います。他のモジュールからのクラスのメソッドを呼び出すには、以下の手順を実行する必要がありますimport Appmain.swift
+0

それは動作し始めます。しかし、クラスファイルを 'Run'ソースに追加するにはどうすればいいですか? –

+0

'Run'モジュールのソースファイルの中で' File'クラスを使用するには、すべてのソースファイルに 'import App'を追加します。' File'クラスを使用します。 –

+0

どのようにそれを行う。あなたは私に例を教えてくれますか?リンク? –

関連する問題