在Swift中指定全局范围

时间:2016-01-03 04:47:09

标签: swift scope namespaces

你能在Swift中指定全局/模块命名空间吗?

此代码:

Argument passed to call that takes no arguments

导致错误MyProject.foo(5)。我在其他地方看到它说Swift.foo(5)MyModule.foo(5)MyProject.foo(5)可能有用,但在Swift 2.1.1中它们似乎没有。

编辑:这听起来像是twisted对其他人有用的答案。任何人都有任何想法,为什么它可能不在我的项目中?

3 个答案:

答案 0 :(得分:4)

是的,您可以使用项目的名称,例如“MyProject”,然后您可以像这样调用全局函数:

class Bar {
  func foo() { MyProject.foo(5) }
}

但我建议将你的全局函数保存在这样的类中:

class GlobalFunctions {
   static func foo(i: Int) { print("global foo", i) }
}

class Bar {
  func foo() { GlobalFunctions.foo(5) }
} 

这样,您的代码更具可读性。

答案 1 :(得分:1)

是。您可以通过在符号名称前面添加项目名称来指定全局范围,如Xcode所示。例如,如果您的项目名称是" myapp",那么您可以将您的全局函数foo(_:Int)调用为myapp.foo(5)

答案 2 :(得分:0)

喔。问题是我有一个与我的项目同名的类,所以MyProject.foo解析为类名而不是全局范围。

我不知道是否有更好的解决方法而不是全局范围内全局函数的let别名,或者@Kiet Nguyen建议将全局变量转换为命名空间。但至少可以解释它。