2016-11-22 55 views
0

我創建了一個Swift框架,只是一個簡單的測試。無法調用非函數值'模塊<F1>'

雨燕文件(F1.swift)代碼:

public class F1{ 

    public init(){ 
     print("inited") 
    } 

    public func call(){ 
     print("called") 
    } 

} 

然後,我建立了框架,我導入到另一個項目。

我試圖用這種方式:在

import F1 

UIViewControllerviewDidLoad

  • 一般:

    var c = F1() 
    c.call() 
    

    的F1.framework已經拖下>嵌入式二進制文件

  • 常規>鏈接的框架和二進制

,我也可以看到它在:

  • 構建階段>鏈接庫二進制文件
  • 構建階段>嵌入構架

The XCode「反應」:import聲明沒有問題。

我收到錯誤的確切位置類實例化:

不能調用非函數的值「模塊......」

我缺少的東西?

[更新]基於一些在線資源和一些其他測試,我假設問題在於構建設置:例如。 構建主動架構只有可能參與其中,但理解如何以及爲什麼會很有趣。

找到最小樣本Xcode項目here

+0

@shallowThought它需要爲您打造一個新的空白項目更短的時間(新建>可可觸摸框架> ...),我沒有做過什麼特別 –

+0

@shallowThought沒有人要求你這樣做:-) –

+0

@shallowThought我嘗試了很多次,有很多不同的項目,這是行不通的。我的版本是版本8.1(8B62)。而且,這個過程很簡單,我真的不明白什麼是錯的 –

回答

0

在您的示例中,您已將模塊F1中的單個類命名爲與該模塊相同的名稱,即F1。 Swift很可能無法區分模塊名稱空間和模塊中類的實際名稱,因此當您只寫F1時,Swift可能會推斷這是明確的名稱空間標註;參考命名空間F1(可通過導入模塊F1獲得)。命名空間自然不能被視爲一種類型,這可以解釋你提示([重點煤礦])

不能調用非功能「模塊的價值的錯誤消息...S模塊F1的初始化「

您可以通過顯式調用類F1驗證這一理論」,通過包括兩個模塊的命名空間,並在調用它(單)類類型:

var c = F1.F1() 
+0

在這種情況下,錯誤更改爲「模塊F1」沒有名爲'F1'的成員「 –

+0

啊,那麼至少我們更接近實際的錯誤。好像你沒有公開你的模塊的任何內容,這可能是由於它不是一個真正的模塊(但是,你寫了,但是你建立了框架?),但只是一個Swift文件。看看[下面的教程](http://www.catswhocode.com/blog/how-to-create-a-pure-swift-module),特別是關於_「生成Logger.swiftdoc」的步驟和'Logger.swiftmodule'「_。 – dfri

+0

它們是由構建過程生成的 –

0

使用你的發佈代碼提供了預期的結果在這裏:

inited 
called 
+0

我不同意:問題的根源可能在於兩者的混合,並且與構建設置有關。它在你的最終目標中的作用並沒有什麼特別的意義:你可以「偶然地」擁有正確的設置。 –

+0

我確實使用過您的(框架)項目,而不更改任何設置。唯一的區別可以在客戶端項目imo中。爲了解決這個問題,請發佈一個包含框架的工作區項目,這是一個最小的示例客戶端並顯示問題。 – shallowThought

+0

我必須重複自己:我*簡單*創建一個空白項目(單一視圖),我導入我的框架,它不起作用。它在任何情況下都不起作用,在我正在進行的一個大型項目中以及在任何新項目中。這完全沒用,我發佈單視圖應用程序模板!我改變了沒有設置,就像你:-) –

相關問題