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您的问题显示了导致问题的实际代码。不要在评论中显示屏幕截图。我认为,如果您正在扩展class
a
,则应使用
fileprivate
,将扩展名存储在
a
的同一文件中。如果您正在扩展class
UIViewController
,则应使用
public
internal
(默认)。如果您想要一个真正私有的
a
方法,请将它放在类
a
中,而不是
扩展名a
中。显示一个可以意外调用
privateFoo()
的示例。我的任何尝试都会导致预期的错误。是否在同一文件中定义的
A
的其他扩展名中调用
privateFoo
?如果是这样的话,那么它将按照预期工作:“私有访问将实体的使用限制为包含声明以及同一文件中该声明的扩展名”。资料来源:这是我在游乐场拍的一张截图。正如您所看到的,privateFoo()是在私有扩展中声明的,但我仍然可以在viewDidLoad()中调用它@hoangCap您的问题显示了导致问题的实际代码。不要在评论中显示屏幕截图。我认为,如果您正在扩展class
a
,则应使用
fileprivate
,将扩展名存储在
a
的同一文件中。如果您正在扩展class
UIViewController
,则应使用
public
internal
(默认)。如果您想要一个真正私有的
a
方法,请将它放在类
a
中,而不是
扩展名a
,但有一种情况,foo只能在文件“FileB.swift”中访问。函数privateFoo只能在同一个私有扩展名中访问。但在某种情况下,只能在文件“FileB.swift”中访问foo。函数privateFoo只能在同一个私有扩展中访问。