你能在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
对其他人有用的答案。任何人都有任何想法,为什么它可能不在我的项目中?
答案 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建议将全局变量转换为命名空间。但至少可以解释它。