Swift 4-扩展内部的私有方法
我正在寻找一种在扩展中编写私有函数的方法 例如:Swift 4-扩展内部的私有方法,swift,methods,private,Swift,Methods,Private,我正在寻找一种在扩展中编写私有函数的方法 例如: class A: UIViewController { override viewDidLoad() { privateFoo() } } private extension A { func foo() { privateFoo() } private func privateFoo() { //Helper function for foo(), expected
class A: UIViewController {
override viewDidLoad() {
privateFoo()
}
}
private extension A {
func foo() {
privateFoo()
}
private func privateFoo() { //Helper function for foo(), expected to be called inside the scope of this extension only
}
}
但是,即使我将privateFoo()声明为private
,我仍然可以从扩展外部调用它,这不是我所期望的
你能帮我实现我的目标吗 对不起,我没有足够的声誉来回复 我想你可以把你的
私人扩展名
放在另一个文件中,这样就可以了
例如:
FileA.swift
class A {
}
斯威夫特
private extension A {
func foo() {
privateFoo()
}
func privateFoo() {
}
}
希望有帮助 对不起,我没有足够的声誉来回复 我想你可以把你的
私人扩展名
放在另一个文件中,这样就可以了
例如:
FileA.swift
class A {
}
斯威夫特
private extension A {
func foo() {
privateFoo()
}
func privateFoo() {
}
}
希望有帮助 显示一个可以意外调用
privateFoo()
的示例。我的任何尝试都会导致预期的错误。是否在同一文件中定义的A
的其他扩展名中调用privateFoo
?如果是这样的话,那么它将按照预期工作:“私有访问将实体的使用限制为包含声明以及同一文件中该声明的扩展名”。资料来源:这是我在游乐场拍的一张截图。正如您所看到的,privateFoo()是在私有扩展中声明的,但我仍然可以在viewDidLoad()中调用它@hoangCap您的问题显示了导致问题的实际代码。不要在评论中显示屏幕截图。我认为,如果您正在扩展classa
,则应使用fileprivate
,将扩展名存储在a
的同一文件中。如果您正在扩展classUIViewController
,则应使用public
或internal
(默认)。如果您想要一个真正私有的a
方法,请将它放在类a
中,而不是扩展名a
中。显示一个可以意外调用privateFoo()
的示例。我的任何尝试都会导致预期的错误。是否在同一文件中定义的A
的其他扩展名中调用privateFoo
?如果是这样的话,那么它将按照预期工作:“私有访问将实体的使用限制为包含声明以及同一文件中该声明的扩展名”。资料来源:这是我在游乐场拍的一张截图。正如您所看到的,privateFoo()是在私有扩展中声明的,但我仍然可以在viewDidLoad()中调用它@hoangCap您的问题显示了导致问题的实际代码。不要在评论中显示屏幕截图。我认为,如果您正在扩展classa
,则应使用fileprivate
,将扩展名存储在a
的同一文件中。如果您正在扩展classUIViewController
,则应使用public
或internal
(默认)。如果您想要一个真正私有的a
方法,请将它放在类a
中,而不是扩展名a
,但有一种情况,foo只能在文件“FileB.swift”中访问。函数privateFoo只能在同一个私有扩展名中访问。但在某种情况下,只能在文件“FileB.swift”中访问foo。函数privateFoo只能在同一个私有扩展中访问。