【问题标题】:Calling a global function which has the same name as a member function调用与成员函数同名的全局函数
【发布时间】:2014-06-05 02:00:10
【问题描述】:

Swift 中的Array 类型有一个名为sort 的成员函数,其签名为sort(isOrderedBefore: (T, T) -> Bool)。这个函数不同于sort的全局版本,它的签名是sort(array: T[], pred: (T, T) -> Bool)

如果扩展了Array(参见Why does the same method fail when inside an Array extension in Swift?),从Array 扩展范围内调用sort 自然会导致使用本地版本。

是否可以从外部作用域显式调用函数,或者专门从全局作用域调用函数,即使它的名称与内部作用域的函数的名称一致?

这类似于 C++ 范围解析运算符 ::

【问题讨论】:

  • 啊,你的意思是像 C++ 的全局作用域运算符::?有趣的问题。
  • @Yawar,是的,完全正确。

标签: swift


【解决方案1】:

Chris Lattner suggests 使用 Swift 的默认命名空间 Swift 限定全局函数的名称。所以你应该可以使用:Swift.sort 访问全局版本。

【讨论】:

  • 啊,但是如果不是在 Swift 中,而是在本地模块中呢?
  • @AlexBrown 如果您的目标名称是“MyApp”,您可以使用 MyApp.theGlobalFunction() 调用全局函数。我与 Alamofire 的全局函数有类似的冲突(针对 iOS7,您不能使用嵌入式框架,因此 lib 没有命名空间)
  • @MathieuLescure 我没有发现MyApp.theGlobal 有效。自从你写这篇文章后,这个功能就消失了吗?
【解决方案2】:

包装全局sort,例如,

func my_sort<T>(arr: T[], pred: (T, T) -> Bool) -> T[] {
    return sort(arr, pred)
}

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 2022-01-08
    • 2011-06-26
    • 1970-01-01
    • 2016-02-12
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多