2014-10-31 54 views
1

Calling a global function which has the same name as a member function直接相關,我想知道如何在自己的模塊中調用全局函數。調用與成員函數具有相同名稱的全局函數第2部分

我有一個名爲解析的項目是一個Cocoa框架。我的Xcode目標的名稱是Parsing。

我在框架級別有一個名爲failure的函數,我試圖從一個具有相同名稱的類型的成員中調用它。

我明顯可以通過改變名稱來解決這個問題;但我更好奇爲什麼合格的名字不適合我。

我得到的編譯錯誤Use of unresolved identifier 'Parsing'下面的代碼:

import Foundation 
//import Parsing; 

func failure<T>() -> ParserOf<T> { 
    return ParserOf { inp in nil } 
} 

class ParserOf<T> { 
    let _parser:String -> (T, String)?; 
    private init(_ p:String -> (T, String)?) { 
     _parser = p; 
    } 

    func parse(s:String) -> (T, String)? { 
     return _parser(s); 
    } 

    class func failure() -> ParserOf<T> { 
     return Parsing.failure(); // compile error 
    } 

} 

如果我取消了import Parsing行,然後我得到的說Cannot load underlying module for 'parsing'這看起來有點奇怪編譯器錯誤,因爲在這個名字的外殼錯誤消息與實際名稱的大小寫不匹配。

回答

2

我通常做到這一點就像你在你的註釋代碼做進口框架:

import Parsing 

,然後用全名,包括名字空間(模塊),再次像你這樣:

Parsing.failure() 

你應該檢查:

  • 您試圖訪問(在這種情況下的函數)的實體被聲明爲public
  • 模塊名稱(Parsing)是正確的
  • 功能實際上是一個全球性的功能,而不是一類/結構方法
  • 目標 - >構建設置 - >包裝 - >產品模塊名稱是實際的型號名稱,你要導入

最後,如果你改變了class func failure()方法的名稱,它的工作原理?

+0

謝謝。我刪除了原始項目並從頭開始,現在它可以按照您的指示工作。我取消了我的進口產品線,一切正常。 – 2014-11-01 00:07:36

相關問題