调用与成员函数同名的全局函数第2部分

时间:2014-10-31 23:46:18

标签: swift

Calling a global function which has the same name as a member function直接相关,我想知道如何在我自己的模块中调用全局函数。

我有一个名为Parsing的项目,它是一个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'看起来有点奇怪,因为错误消息中名称的大小与实际的大小不匹配名。

1 个答案:

答案 0 :(得分:3)

我通常通过导入框架来执行此操作,就像您在评论代码中所做的那样:

import Parsing

然后使用全名,包括命名空间(模块),再次像你一样:

Parsing.failure()

您应该检查:

  • 您尝试访问的实体(在本例中为函数)声明为public
  • 模块名称(Parsing)是正确的
  • 该函数实际上是一个全局函数,而不是一个类/结构方法
  • 目标 - &gt;构建设置 - &gt;包装 - &gt;产品模块名称是您尝试导入的实际型号名称

最后,如果您更改class func failure()方法的名称,它是否有效?